diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | libmatekbd/Makefile.am | 41 | ||||
-rw-r--r-- | libmatekbd/matekbd-desktop-config.c | 21 | ||||
-rw-r--r-- | libmatekbd/matekbd-desktop-config.h | 5 | ||||
-rw-r--r-- | libmatekbd/matekbd-indicator-config.c | 6 | ||||
-rw-r--r-- | libmatekbd/matekbd-indicator-config.h | 5 | ||||
-rw-r--r-- | libmatekbd/matekbd-indicator.c | 9 | ||||
-rw-r--r-- | libmatekbd/matekbd-indicator.h | 2 | ||||
-rw-r--r-- | libmatekbd/matekbd-keyboard-config.c | 4 | ||||
-rw-r--r-- | libmatekbd/matekbd-keyboard-config.h | 5 | ||||
-rw-r--r-- | libmatekbd/matekbd-keyboard-drawing.c | 249 | ||||
-rw-r--r-- | libmatekbd/matekbd-keyboard-drawing.h | 4 | ||||
-rw-r--r-- | libmatekbd/matekbd-status.c | 7 | ||||
-rw-r--r-- | libmatekbd/matekbd-status.h | 2 | ||||
-rw-r--r-- | libmatekbd/matekbd-util.c | 6 | ||||
-rw-r--r-- | libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in | 124 | ||||
-rw-r--r-- | libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in.in | 124 | ||||
-rw-r--r-- | po/POTFILES.in | 2 |
19 files changed, 332 insertions, 292 deletions
diff --git a/Makefile.am b/Makefile.am index ae15bac..545a3d9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,6 +6,8 @@ SUBDIRS = libmatekbd $(TEST) po ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +DISTCHECK_CONFIGURE_FLAGS = --enable-introspection + DISTCLEANFILES = \ intltool-extract \ intltool-merge \ diff --git a/configure.ac b/configure.ac index f9426c4..0ff33f4 100644 --- a/configure.ac +++ b/configure.ac @@ -40,6 +40,7 @@ case "$with_gtk" in GDK_REQUIRED=3.0 ;; esac +AC_SUBST([GTK_API_VERSION]) dnl *************************************************************************** dnl *** Minimum library versions for libmatekbd *** @@ -74,7 +75,7 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package]) AM_GLIB_GNU_GETTEXT -IT_PROG_INTLTOOL([0.35.0]) +IT_PROG_INTLTOOL([0.50.1]) # ***************************************************************************** @@ -123,11 +124,14 @@ AM_CONDITIONAL(BUILD_TESTS, test "$enable_tests" = "yes") AC_SEARCH_LIBS([sqrt], [m]) +GOBJECT_INTROSPECTION_CHECK([0.6.7]) + AC_OUTPUT([ Makefile libmatekbd.pc libmatekbdui.pc po/Makefile.in libmatekbd/Makefile +libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml test/Makefile ]) diff --git a/libmatekbd/Makefile.am b/libmatekbd/Makefile.am index f94ae7c..b071c16 100644 --- a/libmatekbd/Makefile.am +++ b/libmatekbd/Makefile.am @@ -4,7 +4,7 @@ uidir = $(pkgdatadir)/ui ui_DATA = show-layout.ui common_CFLAGS = \ - -I$(top_srcdir) -Wall \ + -I$(top_srcdir) \ $(GDK_CFLAGS) \ $(GIO_CFLAGS) \ $(LIBXKLAVIER_CFLAGS) \ @@ -75,20 +75,20 @@ noinst_HEADERS = $(extra_nih) \ matekbd-config-private.h @INTLTOOL_XML_NOMERGE_RULE@ -gsettings_SCHEMAS = org.mate.peripherals-keyboard-xkb.gschema.xml +gsettingsschema_in_files = org.mate.peripherals-keyboard-xkb.gschema.xml.in +gsettings_SCHEMAS = $(gsettingsschema_in_files:.xml.in=.xml) @GSETTINGS_RULES@ -%.gschema.xml.in: %.gschema.xml.in.in Makefile - $(AM_V_GEN) $(SED) -e 's^\@datadir\@^$(datadir)^g' -e 's^\@GETTEXT_PACKAGE\@^$(GETTEXT_PACKAGE)^g' < $< > $@ - convertdir = $(datadir)/MateConf/gsettings convert_DATA = matekbd.convert EXTRA_DIST = matekbd-indicator-marshal.list \ matekbd-keyboard-drawing-marshal.list \ - $(gsettings_SCHEMAS).in.in $(convert_DATA) $(ui_DATA) + $(gsettingsschema_in_files) \ + $(convert_DATA) \ + $(ui_DATA) -DISTCLEANFILES = $(gsettings_SCHEMAS).in $(gsettings_SCHEMAS) +DISTCLEANFILES = $(gsettings_SCHEMAS) GLIB_GENMARSHAL = $(shell pkg-config --variable=glib_genmarshal glib-2.0) @@ -109,3 +109,30 @@ matekbd-keyboard-drawing-marshal.c: matekbd-keyboard-drawing-marshal.h --body > matekbd-keyboard-drawing-marshal.tmp \ && mv matekbd-keyboard-drawing-marshal.tmp matekbd-keyboard-drawing-marshal.c ) \ || ( rm -f matekbd-keyboard-drawing-marshal.tmp && exit 1 ) + + +-include $(INTROSPECTION_MAKEFILE) +INTROSPECTION_GIRS = +INTROSPECTION_SCANNER_ARGS = --add-include-path=$(srcdir) --warn-all +INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir) + +if HAVE_INTROSPECTION +introspection_sources = $(matekbdinc_HEADERS) \ + $(libmatekbd_la_SOURCES) \ + $(libmatekbdui_la_SOURCES) + +Matekbd-1.0.gir: libmatekbd.la libmatekbdui.la +Matekbd_1_0_gir_INCLUDES = GObject-2.0 Gtk-$(GTK_API_VERSION) xlib-2.0 +Matekbd_1_0_gir_CFLAGS = $(libmatekbdui_la_CFLAGS) +Matekbd_1_0_gir_LIBS = libmatekbd.la libmatekbdui.la +Matekbd_1_0_gir_FILES = $(introspection_sources) +INTROSPECTION_GIRS += Matekbd-1.0.gir + +girdir = $(datadir)/gir-1.0 +gir_DATA = $(INTROSPECTION_GIRS) + +typelibdir = $(libdir)/girepository-1.0 +typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) + +CLEANFILES = $(gir_DATA) $(typelib_DATA) +endif diff --git a/libmatekbd/matekbd-desktop-config.c b/libmatekbd/matekbd-desktop-config.c index 03a98de..0038a9b 100644 --- a/libmatekbd/matekbd-desktop-config.c +++ b/libmatekbd/matekbd-desktop-config.c @@ -24,7 +24,7 @@ #include <stdlib.h> #include <X11/keysym.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <gio/gio.h> #include <matekbd-desktop-config.h> #include <matekbd-config-private.h> @@ -68,13 +68,13 @@ static gboolean pv = variant_ids; total_layouts = g_strv_length ((char **) layout_ids); sld = *short_layout_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); lld = *long_layout_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); svd = *short_variant_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); lvd = *long_variant_descriptions = - g_new0 (char *, total_layouts + 1); + g_new0 (gchar *, total_layouts + 1); while (pl != NULL && *pl != NULL) { @@ -239,6 +239,10 @@ matekbd_desktop_config_restore_group (MatekbdDesktopConfig * config) xkl_engine_lock_group (config->engine, group); } +/** + * matekbd_desktop_config_start_listen: + * @func: (scope notified): a function to call when settings are changed + */ void matekbd_desktop_config_start_listen (MatekbdDesktopConfig * config, GCallback func, @@ -272,7 +276,7 @@ matekbd_desktop_config_load_group_descriptions (MatekbdDesktopConfig { gchar **sld, **lld, **svd, **lvd; gchar **psld, **plld, **plvd; - gchar **psgn, **pfgn; + gchar **psgn, **pfgn, **psvd; gint total_descriptions; if (!matekbd_desktop_config_get_lv_descriptions @@ -291,8 +295,11 @@ matekbd_desktop_config_load_group_descriptions (MatekbdDesktopConfig plld = lld; psld = sld; plvd = lvd; + psvd = svd; while (plld != NULL && *plld != NULL) { - *psgn++ = g_strdup (*psld++); + gchar *sd = (*psvd[0] == '\0') ? *psld : *psvd; + psld++, psvd++; + *psgn++ = g_strdup (sd); *pfgn++ = g_strdup (matekbd_keyboard_config_format_full_layout (*plld++, *plvd++)); } diff --git a/libmatekbd/matekbd-desktop-config.h b/libmatekbd/matekbd-desktop-config.h index b2ced48..ce890ae 100644 --- a/libmatekbd/matekbd-desktop-config.h +++ b/libmatekbd/matekbd-desktop-config.h @@ -33,7 +33,8 @@ extern const gchar MATEKBD_DESKTOP_CONFIG_KEY_LAYOUT_NAMES_AS_GROUP_NAMES[]; /* * General configuration */ -typedef struct _MatekbdDesktopConfig { +typedef struct _MatekbdDesktopConfig MatekbdDesktopConfig; +struct _MatekbdDesktopConfig { gint default_group; gboolean group_per_app; gboolean handle_indicators; @@ -44,7 +45,7 @@ typedef struct _MatekbdDesktopConfig { GSettings *settings; int config_listener_id; XklEngine *engine; -} MatekbdDesktopConfig; +}; /** * MatekbdDesktopConfig functions diff --git a/libmatekbd/matekbd-indicator-config.c b/libmatekbd/matekbd-indicator-config.c index 18bb994..cf35223 100644 --- a/libmatekbd/matekbd-indicator-config.c +++ b/libmatekbd/matekbd-indicator-config.c @@ -26,7 +26,7 @@ #include <pango/pango.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <gdk/gdkx.h> #include <matekbd-keyboard-config.h> @@ -301,6 +301,10 @@ matekbd_indicator_config_activate (MatekbdIndicatorConfig * ind_config) ind_config->secondary_groups_mask); } +/** + * matekbd_indicator_config_start_listen: + * @func: (scope notified): a function to call when settings are changed + */ void matekbd_indicator_config_start_listen (MatekbdIndicatorConfig * ind_config, diff --git a/libmatekbd/matekbd-indicator-config.h b/libmatekbd/matekbd-indicator-config.h index d7545ff..c989f2a 100644 --- a/libmatekbd/matekbd-indicator-config.h +++ b/libmatekbd/matekbd-indicator-config.h @@ -27,7 +27,8 @@ /* * Indicator configuration */ -typedef struct _MatekbdIndicatorConfig { +typedef struct _MatekbdIndicatorConfig MatekbdIndicatorConfig; +struct _MatekbdIndicatorConfig { int secondary_groups_mask; gboolean show_flags; @@ -41,7 +42,7 @@ typedef struct _MatekbdIndicatorConfig { GtkIconTheme *icon_theme; int config_listener_id; XklEngine *engine; -} MatekbdIndicatorConfig; +}; /** * MatekbdIndicatorConfig functions - diff --git a/libmatekbd/matekbd-indicator.c b/libmatekbd/matekbd-indicator.c index aef88d2..bd7bf31 100644 --- a/libmatekbd/matekbd-indicator.c +++ b/libmatekbd/matekbd-indicator.c @@ -16,13 +16,14 @@ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ +#include <config.h> #include <memory.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <gdk/gdkx.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <matekbd-indicator.h> #include <matekbd-indicator-marshal.h> @@ -510,7 +511,7 @@ matekbd_indicator_load_group_names (const gchar ** layout_ids, gint i, total_groups = xkl_engine_get_num_groups (globals.engine); globals.full_group_names = - g_new0 (char *, total_groups + 1); + g_new0 (gchar *, total_groups + 1); if (xkl_engine_get_features (globals.engine) & XKLF_MULTIPLE_LAYOUTS_SUPPORTED) { @@ -870,6 +871,10 @@ matekbd_indicator_get_xkl_engine () return globals.engine; } +/** + * matekbd_indicator_get_group_names: + * Returns: (transfer none) (array zero-terminated=1): List of group names + */ gchar ** matekbd_indicator_get_group_names () { diff --git a/libmatekbd/matekbd-indicator.h b/libmatekbd/matekbd-indicator.h index ac1418b..0332e1a 100644 --- a/libmatekbd/matekbd-indicator.h +++ b/libmatekbd/matekbd-indicator.h @@ -34,7 +34,7 @@ extern "C" { #define MATEKBD_TYPE_INDICATOR (matekbd_indicator_get_type ()) #define MATEKBD_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MATEKBD_TYPE_INDICATOR, MatekbdIndicator)) -#define MATEKBD_INDCATOR_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), MATEKBD_TYPE_INDICATOR, MatekbdIndicatorClass)) +#define MATEKBD_INDICATOR_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), MATEKBD_TYPE_INDICATOR, MatekbdIndicatorClass)) #define MATEKBD_IS_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MATEKBD_TYPE_INDICATOR)) #define MATEKBD_IS_INDICATOR_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), MATEKBD_TYPE_INDICATOR)) #define MATEKBD_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MATEKBD_TYPE_INDICATOR, MatekbdIndicatorClass)) diff --git a/libmatekbd/matekbd-keyboard-config.c b/libmatekbd/matekbd-keyboard-config.c index 019e1d6..9a7abc2 100644 --- a/libmatekbd/matekbd-keyboard-config.c +++ b/libmatekbd/matekbd-keyboard-config.c @@ -635,6 +635,10 @@ matekbd_keyboard_config_activate (MatekbdKeyboardConfig * kbd_config) return rv; } +/** + * matekbd_keyboard_config_start_listen: + * @func: (scope notified): a function to call when settings are changed + */ void matekbd_keyboard_config_start_listen (MatekbdKeyboardConfig * kbd_config, GCallback func, diff --git a/libmatekbd/matekbd-keyboard-config.h b/libmatekbd/matekbd-keyboard-config.h index bd6bbdc..5864f3d 100644 --- a/libmatekbd/matekbd-keyboard-config.h +++ b/libmatekbd/matekbd-keyboard-config.h @@ -32,7 +32,8 @@ extern const gchar MATEKBD_KEYBOARD_CONFIG_KEY_OPTIONS[]; /* * Keyboard Configuration */ -typedef struct _MatekbdKeyboardConfig { +typedef struct _MatekbdKeyboardConfig MatekbdKeyboardConfig; +struct _MatekbdKeyboardConfig { gchar *model; gchar **layouts_variants; gchar **options; @@ -41,7 +42,7 @@ typedef struct _MatekbdKeyboardConfig { GSettings *settings; int config_listener_id; XklEngine *engine; -} MatekbdKeyboardConfig; +}; /** * MatekbdKeyboardConfig functions diff --git a/libmatekbd/matekbd-keyboard-drawing.c b/libmatekbd/matekbd-keyboard-drawing.c index 7e9f8d7..bd1a35e 100644 --- a/libmatekbd/matekbd-keyboard-drawing.c +++ b/libmatekbd/matekbd-keyboard-drawing.c @@ -26,7 +26,7 @@ #include <stdlib.h> #include <memory.h> #include <math.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <libxklavier/xklavier.h> #include <matekbd-keyboard-drawing.h> @@ -618,6 +618,21 @@ find_keycode (MatekbdKeyboardDrawing * drawing, gchar * key_name) return INVALID_KEYCODE; } +static void +set_markup (MatekbdKeyboardDrawingRenderContext * context, gchar *txt) +{ + PangoLayout *layout = context->layout; + txt = strcmp ("<", txt) ? txt : "<"; + txt = strcmp ("&", txt) ? txt : "&"; + if (g_utf8_strlen (txt, -1) > 1) { + gchar* buf = + g_strdup_printf ("<span size=\"x-small\">%s</span>", txt); + pango_layout_set_markup (layout, buf, -1); + g_free (buf); + } else { + pango_layout_set_markup (layout, txt, -1); + } +} static void set_key_label_in_layout (MatekbdKeyboardDrawingRenderContext * context, @@ -625,131 +640,130 @@ set_key_label_in_layout (MatekbdKeyboardDrawingRenderContext * context, { gchar buf[5]; gunichar uc; - PangoLayout *layout = context->layout; switch (keyval) { case GDK_KEY_Scroll_Lock: - pango_layout_set_text (layout, "Scroll\nLock", -1); + set_markup (context, "Scroll\nLock"); break; case GDK_KEY_space: - pango_layout_set_text (layout, "", -1); + set_markup (context, ""); break; case GDK_KEY_Sys_Req: - pango_layout_set_text (layout, "Sys Rq", -1); + set_markup (context, "Sys Rq"); break; case GDK_KEY_Page_Up: - pango_layout_set_text (layout, "Page\nUp", -1); + set_markup (context, "Page\nUp"); break; case GDK_KEY_Page_Down: - pango_layout_set_text (layout, "Page\nDown", -1); + set_markup (context, "Page\nDown"); break; case GDK_KEY_Num_Lock: - pango_layout_set_text (layout, "Num\nLock", -1); + set_markup (context, "Num\nLock"); break; case GDK_KEY_KP_Page_Up: - pango_layout_set_text (layout, "Pg Up", -1); + set_markup (context, "Pg Up"); break; case GDK_KEY_KP_Page_Down: - pango_layout_set_text (layout, "Pg Dn", -1); + set_markup (context, "Pg Dn"); break; case GDK_KEY_KP_Home: - pango_layout_set_text (layout, "Home", -1); + set_markup (context, "Home"); break; case GDK_KEY_KP_Left: - pango_layout_set_text (layout, "Left", -1); + set_markup (context, "Left"); break; case GDK_KEY_KP_End: - pango_layout_set_text (layout, "End", -1); + set_markup (context, "End"); break; case GDK_KEY_KP_Up: - pango_layout_set_text (layout, "Up", -1); + set_markup (context, "Up"); break; case GDK_KEY_KP_Begin: - pango_layout_set_text (layout, "Begin", -1); + set_markup (context, "Begin"); break; case GDK_KEY_KP_Right: - pango_layout_set_text (layout, "Right", -1); + set_markup (context, "Right"); break; case GDK_KEY_KP_Enter: - pango_layout_set_text (layout, "Enter", -1); + set_markup (context, "Enter"); break; case GDK_KEY_KP_Down: - pango_layout_set_text (layout, "Down", -1); + set_markup (context, "Down"); break; case GDK_KEY_KP_Insert: - pango_layout_set_text (layout, "Ins", -1); + set_markup (context, "Ins"); break; case GDK_KEY_KP_Delete: - pango_layout_set_text (layout, "Del", -1); + set_markup (context, "Del"); break; case GDK_KEY_dead_grave: - pango_layout_set_text (layout, "ˋ", -1); + set_markup (context, "ˋ"); break; case GDK_KEY_dead_acute: - pango_layout_set_text (layout, "ˊ", -1); + set_markup (context, "ˊ"); break; case GDK_KEY_dead_circumflex: - pango_layout_set_text (layout, "ˆ", -1); + set_markup (context, "ˆ"); break; case GDK_KEY_dead_tilde: - pango_layout_set_text (layout, "~", -1); + set_markup (context, "~"); break; case GDK_KEY_dead_macron: - pango_layout_set_text (layout, "ˉ", -1); + set_markup (context, "ˉ"); break; case GDK_KEY_dead_breve: - pango_layout_set_text (layout, "˘", -1); + set_markup (context, "˘"); break; case GDK_KEY_dead_abovedot: - pango_layout_set_text (layout, "˙", -1); + set_markup (context, "˙"); break; case GDK_KEY_dead_diaeresis: - pango_layout_set_text (layout, "¨", -1); + set_markup (context, "¨"); break; case GDK_KEY_dead_abovering: - pango_layout_set_text (layout, "˚", -1); + set_markup (context, "˚"); break; case GDK_KEY_dead_doubleacute: - pango_layout_set_text (layout, "˝", -1); + set_markup (context, "˝"); break; case GDK_KEY_dead_caron: - pango_layout_set_text (layout, "ˇ", -1); + set_markup (context, "ˇ"); break; case GDK_KEY_dead_cedilla: - pango_layout_set_text (layout, "¸", -1); + set_markup (context, "¸"); break; case GDK_KEY_dead_ogonek: - pango_layout_set_text (layout, "˛", -1); + set_markup (context, "˛"); break; /* case GDK_KEY_dead_iota: @@ -757,32 +771,32 @@ set_key_label_in_layout (MatekbdKeyboardDrawingRenderContext * context, * case GDK_KEY_dead_semivoiced_sound: */ case GDK_KEY_dead_belowdot: - pango_layout_set_text (layout, " ̣", -1); + set_markup (context, " ̣"); break; case GDK_KEY_horizconnector: - pango_layout_set_text (layout, "horiz\nconn", -1); + set_markup (context, "horiz\nconn"); break; case GDK_KEY_Mode_switch: - pango_layout_set_text (layout, "AltGr", -1); + set_markup (context, "AltGr"); break; case GDK_KEY_Multi_key: - pango_layout_set_text (layout, "Compose", -1); + set_markup (context, "Compose"); break; default: uc = gdk_keyval_to_unicode (keyval); if (uc != 0 && g_unichar_isgraph (uc)) { buf[g_unichar_to_utf8 (uc, buf)] = '\0'; - pango_layout_set_text (layout, buf, -1); + set_markup (context, buf); } else { gchar *name = gdk_keyval_name (keyval); - if (name) - pango_layout_set_text (layout, name, -1); - else - pango_layout_set_text (layout, "", -1); + if (name) { + set_markup (context, name); + } else + set_markup (context, ""); } } } @@ -988,6 +1002,31 @@ draw_key_label (MatekbdKeyboardDrawingRenderContext * context, } } +/** + The x offset is calculated for complex shapes. It is the rightmost of the vertical lines in the outline + */ +static gint +calc_origin_offset_x (XkbOutlineRec * outline) +{ + gint rv = 0; + gint i; + XkbPointPtr point = outline->points; + if (outline->num_points < 3) + return 0; + for (i = outline->num_points; --i > 0;) { + gint x1 = point->x; + gint y1 = point++->y; + gint x2 = point->x; + gint y2 = point->y; + + /*vertical, bottom to top (clock-wise), on the left */ + if ((x1 == x2) && (y1 > y2) && (x1 > rv)) { + rv = x1; + } + } + return rv; +} + /* groups are from 0-3 */ static void draw_key (MatekbdKeyboardDrawingRenderContext * context, @@ -995,6 +1034,8 @@ draw_key (MatekbdKeyboardDrawingRenderContext * context, { XkbShapeRec *shape; GdkColor *color; + XkbOutlineRec *outline; + int origin_offset_x; /* gint i; */ if (!drawing->xkb) @@ -1023,9 +1064,9 @@ draw_key (MatekbdKeyboardDrawingRenderContext * context, #endif /* draw the primary outline */ - draw_outline (context, - shape->primary ? shape->primary : shape->outlines, - color, key->angle, key->origin_x, key->origin_y); + outline = shape->primary ? shape->primary : shape->outlines; + draw_outline (context, outline, color, key->angle, key->origin_x, + key->origin_y); #if 0 /* don't draw other outlines for now, since * the text placement does not take them into account @@ -1039,8 +1080,9 @@ draw_key (MatekbdKeyboardDrawingRenderContext * context, } #endif + origin_offset_x = calc_origin_offset_x (outline); draw_key_label (context, drawing, key->keycode, key->angle, - key->origin_x, key->origin_y, + key->origin_x + origin_offset_x, key->origin_y, shape->bounds.x2, shape->bounds.y2); } @@ -1143,7 +1185,7 @@ draw_text_doodad (MatekbdKeyboardDrawingRenderContext * context, y = xkb_to_pixmap_coord (context, doodad->origin_y + text_doodad->top); - pango_layout_set_text (context->layout, text_doodad->text, -1); + set_markup (context, text_doodad->text); draw_pango_layout (context, drawing, doodad->angle, x, y); } @@ -1311,20 +1353,11 @@ create_cairo (MatekbdKeyboardDrawing * drawing) GtkStateType state; if (drawing == NULL) return FALSE; -#if GTK_CHECK_VERSION (3, 0, 0) if (drawing->surface == NULL) return FALSE; -#else - if (drawing->pixmap == NULL) - return FALSE; -#endif drawing->renderContext->cr = -#if GTK_CHECK_VERSION (3, 0, 0) cairo_create (drawing->surface); -#else - gdk_cairo_create (GDK_DRAWABLE (drawing->pixmap)); -#endif state = gtk_widget_get_state (GTK_WIDGET (drawing)); drawing->renderContext->dark_color = @@ -1352,15 +1385,12 @@ draw_keyboard (MatekbdKeyboardDrawing * drawing) gtk_widget_get_allocation (GTK_WIDGET (drawing), &allocation); -#if GTK_CHECK_VERSION (3, 0, 0) drawing->surface = - gdk_window_create_similar_surface (gtk_widget_get_window (GTK_WIDGET (drawing)), - CAIRO_CONTENT_COLOR, allocation.width, allocation.height); -#else - drawing->pixmap = - gdk_pixmap_new (gtk_widget_get_window (GTK_WIDGET (drawing)), - allocation.width, allocation.height, -1); -#endif + gdk_window_create_similar_surface (gtk_widget_get_window + (GTK_WIDGET (drawing)), + CAIRO_CONTENT_COLOR, + allocation.width, + allocation.height); if (create_cairo (drawing)) { /* blank background */ @@ -1406,61 +1436,28 @@ free_render_context (MatekbdKeyboardDrawing * drawing) } static gboolean -expose_event (GtkWidget * widget, #if GTK_CHECK_VERSION (3, 0, 0) - cairo_t *cr, +draw (GtkWidget *widget, + cairo_t *cr, + MatekbdKeyboardDrawing *drawing) #else - GdkEventExpose * event, +expose_event (GtkWidget *widget, + GdkEventExpose *event, + MatekbdKeyboardDrawing *drawing) #endif - MatekbdKeyboardDrawing * drawing) { - GtkAllocation allocation; - #if !GTK_CHECK_VERSION (3, 0, 0) - cairo_t *cr; + cairo_t *cr = gdk_cairo_create (event->window); #endif if (!drawing->xkb) return FALSE; -#if GTK_CHECK_VERSION (3, 0, 0) if (drawing->surface == NULL) -#else - if (drawing->pixmap == NULL) -#endif return FALSE; -#if GTK_CHECK_VERSION (3, 0, 0) - cairo_set_source_surface (cr, drawing->surface, 0, 0); - cairo_paint (cr); -#else - cr = gdk_cairo_create (event->window); - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - gdk_cairo_set_source_pixmap (cr, drawing->pixmap, 0, 0); - cairo_paint (cr); - - cairo_destroy (cr); -#endif - - if (gtk_widget_has_focus (widget)) { - gtk_widget_get_allocation (widget, &allocation); - gtk_paint_focus (gtk_widget_get_style (widget), -#if GTK_CHECK_VERSION (3, 0, 0) - cr, -#else - gtk_widget_get_window (widget), -#endif - gtk_widget_get_state (widget), -#if GTK_CHECK_VERSION (3, 0, 0) - widget, "keyboard-drawing", -#else - &event->area, widget, "keyboard-drawing", -#endif - 0, 0, allocation.width, - allocation.height); - } + cairo_set_source_surface (cr, drawing->surface, 0, 0); + cairo_paint (cr); return FALSE; } @@ -1520,17 +1517,10 @@ size_allocate (GtkWidget * widget, { MatekbdKeyboardDrawingRenderContext *context = drawing->renderContext; -#if GTK_CHECK_VERSION (3, 0, 0) if (drawing->surface) { cairo_surface_destroy (drawing->surface); drawing->surface = NULL; } -#else - if (drawing->pixmap) { - g_object_unref (drawing->pixmap); - drawing->pixmap = NULL; - } -#endif if (!context_setup_scaling (context, drawing, allocation->width, allocation->height, @@ -2031,13 +2021,9 @@ destroy (MatekbdKeyboardDrawing * drawing) drawing->idle_redraw = 0; } -#if GTK_CHECK_VERSION (3, 0, 0) if (drawing->surface != NULL) { cairo_surface_destroy (drawing->surface); } -#else - g_object_unref (drawing->pixmap); -#endif } static void @@ -2074,11 +2060,7 @@ matekbd_keyboard_drawing_init (MatekbdKeyboardDrawing * drawing) drawing->screen_num = gdk_screen_get_number (gdk_screen_get_default ()); -#if GTK_CHECK_VERSION (3, 0, 0) drawing->surface = NULL; -#else - drawing->pixmap = NULL; -#endif alloc_render_context (drawing); drawing->keyboard_items = NULL; @@ -2141,10 +2123,11 @@ matekbd_keyboard_drawing_init (MatekbdKeyboardDrawing * drawing) | GDK_FOCUS_CHANGE_MASK); #if GTK_CHECK_VERSION (3, 0, 0) g_signal_connect (G_OBJECT (drawing), "draw", + G_CALLBACK (draw), drawing); #else g_signal_connect (G_OBJECT (drawing), "expose-event", -#endif G_CALLBACK (expose_event), drawing); +#endif g_signal_connect_after (G_OBJECT (drawing), "key-press-event", G_CALLBACK (key_event), drawing); g_signal_connect_after (G_OBJECT (drawing), "key-release-event", @@ -2230,7 +2213,7 @@ matekbd_keyboard_drawing_set_mods (MatekbdKeyboardDrawing * drawing, guint mods) /** * matekbd_keyboard_drawing_render: - * @drawing: keyboard layout to render + * @kbdrawing: keyboard layout to render * @cr: Cairo context to render to * @layout: Pango layout to use to render text * @x: left coordinate (pixels) of region to render in @@ -2245,7 +2228,7 @@ matekbd_keyboard_drawing_set_mods (MatekbdKeyboardDrawing * drawing, guint mods) * @returns: %TRUE on success, %FALSE on failure */ gboolean -matekbd_keyboard_drawing_render (MatekbdKeyboardDrawing * drawing, +matekbd_keyboard_drawing_render (MatekbdKeyboardDrawing * kbdrawing, cairo_t * cr, PangoLayout * layout, double x, double y, @@ -2254,22 +2237,22 @@ matekbd_keyboard_drawing_render (MatekbdKeyboardDrawing * drawing, { MatekbdKeyboardDrawingRenderContext context = { cr, - drawing->renderContext->angle, + kbdrawing->renderContext->angle, layout, pango_font_description_copy (gtk_widget_get_style (GTK_WIDGET - (drawing))->font_desc), + (kbdrawing))->font_desc), 1, 1, - >k_widget_get_style (GTK_WIDGET (drawing))->dark - [gtk_widget_get_state (GTK_WIDGET (drawing))] + >k_widget_get_style (GTK_WIDGET (kbdrawing))->dark + [gtk_widget_get_state (GTK_WIDGET (kbdrawing))] }; - if (!context_setup_scaling (&context, drawing, width, height, + if (!context_setup_scaling (&context, kbdrawing, width, height, dpi_x, dpi_y)) return FALSE; cairo_translate (cr, x, y); - draw_keyboard_to_context (&context, drawing); + draw_keyboard_to_context (&context, kbdrawing); pango_font_description_free (context.font_desc); @@ -2677,11 +2660,7 @@ matekbd_keyboard_drawing_new_dialog (gint group, gchar * group_name) g_object_set_data (G_OBJECT (dialog), "kbdraw", kbdraw); - #if GTK_CHECK_VERSION(3, 0, 0) - g_signal_connect_swapped(G_OBJECT(dialog), "destroy", G_CALLBACK(g_object_unref), g_object_get_data(G_OBJECT(dialog), "builderData")); - #else - g_signal_connect_swapped(GTK_OBJECT(dialog), "destroy", G_CALLBACK(g_object_unref), g_object_get_data(G_OBJECT(dialog), "builderData")); - #endif + g_signal_connect_swapped(dialog, "destroy", G_CALLBACK(g_object_unref), g_object_get_data(G_OBJECT(dialog), "builderData")); gtk_widget_show_all(dialog); diff --git a/libmatekbd/matekbd-keyboard-drawing.h b/libmatekbd/matekbd-keyboard-drawing.h index ba74324..e481947 100644 --- a/libmatekbd/matekbd-keyboard-drawing.h +++ b/libmatekbd/matekbd-keyboard-drawing.h @@ -125,11 +125,7 @@ struct _MatekbdKeyboardDrawing { GtkDrawingArea parent; -#if GTK_CHECK_VERSION (3, 0, 0) cairo_surface_t *surface; -#else - GdkPixmap *pixmap; -#endif XkbDescRec *xkb; gboolean xkbOnDisplay; guint l3mod; diff --git a/libmatekbd/matekbd-status.c b/libmatekbd/matekbd-status.c index 3f6c613..4beaecb 100644 --- a/libmatekbd/matekbd-status.c +++ b/libmatekbd/matekbd-status.c @@ -16,6 +16,7 @@ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ +#include <config.h> #include <memory.h> @@ -23,7 +24,7 @@ #include <gdk/gdkkeysyms.h> #include <gdk/gdkx.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <glib/gprintf.h> #include <matekbd-status.h> @@ -826,6 +827,10 @@ matekbd_status_get_xkl_engine () return globals.engine; } +/** + * matekbd_status_get_group_names: + * Returns: (transfer none) (array zero-terminated=1): List of group names + */ gchar ** matekbd_status_get_group_names () { diff --git a/libmatekbd/matekbd-status.h b/libmatekbd/matekbd-status.h index e1a6100..624398b 100644 --- a/libmatekbd/matekbd-status.h +++ b/libmatekbd/matekbd-status.h @@ -34,7 +34,7 @@ extern "C" { #define MATEKBD_TYPE_STATUS (matekbd_status_get_type ()) #define MATEKBD_STATUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MATEKBD_TYPE_STATUS, MatekbdStatus)) - #define MATEKBD_INDCATOR_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), MATEKBD_TYPE_STATUS, MatekbdStatusClass)) + #define MATEKBD_STATUS_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), MATEKBD_TYPE_STATUS, MatekbdStatusClass)) #define MATEKBD_IS_STATUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MATEKBD_TYPE_STATUS)) #define MATEKBD_IS_STATUS_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), MATEKBD_TYPE_STATUS)) #define MATEKBD_STATUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MATEKBD_TYPE_STATUS, MatekbdStatusClass)) diff --git a/libmatekbd/matekbd-util.c b/libmatekbd/matekbd-util.c index 26f9967..f311bd4 100644 --- a/libmatekbd/matekbd-util.c +++ b/libmatekbd/matekbd-util.c @@ -23,7 +23,7 @@ #include <time.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <libxklavier/xklavier.h> @@ -54,6 +54,10 @@ const gchar MATEKBD_PREVIEW_CONFIG_KEY_Y[] = "y"; const gchar MATEKBD_PREVIEW_CONFIG_KEY_WIDTH[] = "width"; const gchar MATEKBD_PREVIEW_CONFIG_KEY_HEIGHT[] = "height"; +/** + * matekbd_preview_load_position: + * Returns: (transfer full): A rectangle to use + */ GdkRectangle * matekbd_preview_load_position (void) { diff --git a/libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in b/libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in new file mode 100644 index 0000000..abbe803 --- /dev/null +++ b/libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in @@ -0,0 +1,124 @@ +<schemalist gettext-domain="@GETTEXT_PACKAGE@"> + <schema id="org.mate.peripherals-keyboard-xkb" path="/org/mate/desktop/peripherals/keyboard/"> + <child name="kbd" schema="org.mate.peripherals-keyboard-xkb.kbd"/> + <child name="general" schema="org.mate.peripherals-keyboard-xkb.general"/> + <child name="preview" schema="org.mate.peripherals-keyboard-xkb.preview"/> + <child name="indicator" schema="org.mate.peripherals-keyboard-xkb.indicator"/> + </schema> + <schema id="org.mate.peripherals-keyboard-xkb.kbd" path="/org/mate/desktop/peripherals/keyboard/kbd/"> + <key name="model" type="s"> + <default>''</default> + <summary>Keyboard model</summary> + <description>keyboard model</description> + </key> + <key name="layouts" type="as"> + <default>[]</default> + <summary>Keyboard layout</summary> + <description>keyboard layout</description> + </key> + <key name="options" type="as"> + <default>[]</default> + <summary>Keyboard options</summary> + <description>Keyboard options</description> + </key> + </schema> + <schema id="org.mate.peripherals-keyboard-xkb.general" path="/org/mate/desktop/peripherals/keyboard/general/"> + <key name="update-handlers" type="as"> + <default>[]</default> + <summary>Keyboard Update Handlers</summary> + <description>A collection of scripts to run whenever the keyboard state is reloaded. Useful for re-applying xmodmap based adjustments</description> + </key> + <key name="known-file-list" type="as"> + <default>[]</default> + <summary>modmap file list</summary> + <description>A list of modmap files available in the $HOME directory.</description> + </key> + <key name="default-group" type="i"> + <default>-1</default> + <summary>Default group, assigned on window creation</summary> + <description>Default group, assigned on window creation</description> + </key> + <key name="group-per-window" type="b"> + <default>true</default> + <summary>Keep and manage separate group per window</summary> + <description>Keep and manage separate group per window</description> + </key> + <key name="handle-indicators" type="b"> + <default>false</default> + <summary>Save/restore indicators together with layout groups</summary> + <description>Save/restore indicators together with layout groups</description> + </key> + <key name="layout-names-as-group-names" type="b"> + <default>true</default> + <summary>Show layout names instead of group names</summary> + <description>Show layout names instead of group names (only for versions of XFree supporting multiple layouts)</description> + </key> + <key name="load-extra-items" type="b"> + <default>false</default> + <summary>Load extra configuration items</summary> + <description>Load exotic, rarely used layouts and options</description> + </key> + <key name="disable-sysconfig-changed-warning" type="b"> + <default>false</default> + <summary>Suppress the "X sysconfig changed" warning message</summary> + <description>Suppress the "X sysconfig changed" warning message</description> + </key> + <key name="disable-indicator" type="b"> + <default>false</default> + <summary>Allow to disable the keyboard indicator tray icon</summary> + <description>Allow to disable the keyboard indicator tray icon</description> + </key> + <key name="duplicate-leds" type="b"> + <default>false</default> + <summary>Show keyboard leds indicator</summary> + <description>Show keyboard leds indicator</description> + </key> + </schema> + <schema id="org.mate.peripherals-keyboard-xkb.preview" path="/org/mate/desktop/peripherals/keyboard/preview/"> + <key name="x" type="i"> + <default>-1</default> + <summary>The Keyboard Preview, X offset</summary> + <description>The Keyboard Preview, X offset</description> + </key> + <key name="y" type="i"> + <default>-1</default> + <summary>The Keyboard Preview, Y offset</summary> + <description>The Keyboard Preview, Y offset</description> + </key> + <key name="width" type="i"> + <default>-1</default> + <summary>The Keyboard Preview, width</summary> + <description>The Keyboard Preview, width</description> + </key> + <key name="height" type="i"> + <default>-1</default> + <summary>The Keyboard Preview, height</summary> + <description>The Keyboard Preview, height</description> + </key> + </schema> + <schema id="org.mate.peripherals-keyboard-xkb.indicator" path="/org/mate/desktop/peripherals/keyboard/indicator/"> + <key name="secondary" type="i"> + <default>0</default> + <summary>Secondary groups</summary> + <description>Secondary groups</description> + </key> + <key name="show-flags" type="b"> + <default>false</default> + </key> + <key name="font-family" type="s"> + <default>''</default> + <summary>The font</summary> + <description>The font for the layout indicator. This should be in "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]" format.</description> + </key> + <key name="foreground-color" type="s"> + <default>''</default> + <summary>The foreground color</summary> + <description>The foreground color for the layout indicator. This should be in "R G B" format, for example "255 0 0".</description> + </key> + <key name="background-color" type="s"> + <default>''</default> + <summary>The background color</summary> + <description>The background color for the layout indicator. This should be in "R G B" format, for example "255 0 0".</description> + </key> + </schema> +</schemalist> diff --git a/libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in.in b/libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in.in deleted file mode 100644 index 9224053..0000000 --- a/libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in.in +++ /dev/null @@ -1,124 +0,0 @@ -<schemalist gettext-domain="@GETTEXT_PACKAGE@"> - <schema id="org.mate.peripherals-keyboard-xkb" path="/org/mate/desktop/peripherals/keyboard/"> - <child name="kbd" schema="org.mate.peripherals-keyboard-xkb.kbd"/> - <child name="general" schema="org.mate.peripherals-keyboard-xkb.general"/> - <child name="preview" schema="org.mate.peripherals-keyboard-xkb.preview"/> - <child name="indicator" schema="org.mate.peripherals-keyboard-xkb.indicator"/> - </schema> - <schema id="org.mate.peripherals-keyboard-xkb.kbd" path="/org/mate/desktop/peripherals/keyboard/kbd/"> - <key name="model" type="s"> - <default>''</default> - <_summary>Keyboard model</_summary> - <_description>keyboard model</_description> - </key> - <key name="layouts" type="as"> - <default>[]</default> - <_summary>Keyboard layout</_summary> - <_description>keyboard layout</_description> - </key> - <key name="options" type="as"> - <default>[]</default> - <_summary>Keyboard options</_summary> - <_description>Keyboard options</_description> - </key> - </schema> - <schema id="org.mate.peripherals-keyboard-xkb.general" path="/org/mate/desktop/peripherals/keyboard/general/"> - <key name="update-handlers" type="as"> - <default>[]</default> - <_summary>Keyboard Update Handlers</_summary> - <_description>A collection of scripts to run whenever the keyboard state is reloaded. Useful for re-applying xmodmap based adjustments</_description> - </key> - <key name="known-file-list" type="as"> - <default>[]</default> - <_summary>modmap file list</_summary> - <_description>A list of modmap files available in the $HOME directory.</_description> - </key> - <key name="default-group" type="i"> - <default>-1</default> - <_summary>Default group, assigned on window creation</_summary> - <_description>Default group, assigned on window creation</_description> - </key> - <key name="group-per-window" type="b"> - <default>true</default> - <_summary>Keep and manage separate group per window</_summary> - <_description>Keep and manage separate group per window</_description> - </key> - <key name="handle-indicators" type="b"> - <default>false</default> - <_summary>Save/restore indicators together with layout groups</_summary> - <_description>Save/restore indicators together with layout groups</_description> - </key> - <key name="layout-names-as-group-names" type="b"> - <default>true</default> - <_summary>Show layout names instead of group names</_summary> - <_description>Show layout names instead of group names (only for versions of XFree supporting multiple layouts)</_description> - </key> - <key name="load-extra-items" type="b"> - <default>false</default> - <_summary>Load extra configuration items</_summary> - <_description>Load exotic, rarely used layouts and options</_description> - </key> - <key name="disable-sysconfig-changed-warning" type="b"> - <default>false</default> - <_summary>Suppress the "X sysconfig changed" warning message</_summary> - <_description>Suppress the "X sysconfig changed" warning message</_description> - </key> - <key name="disable-indicator" type="b"> - <default>false</default> - <_summary>Allow to disable the keyboard indicator tray icon</_summary> - <_description>Allow to disable the keyboard indicator tray icon</_description> - </key> - <key name="duplicate-leds" type="b"> - <default>false</default> - <_summary>Show keyboard leds indicator</_summary> - <_description>Show keyboard leds indicator</_description> - </key> - </schema> - <schema id="org.mate.peripherals-keyboard-xkb.preview" path="/org/mate/desktop/peripherals/keyboard/preview/"> - <key name="x" type="i"> - <default>-1</default> - <_summary>The Keyboard Preview, X offset</_summary> - <_description>The Keyboard Preview, X offset</_description> - </key> - <key name="y" type="i"> - <default>-1</default> - <_summary>The Keyboard Preview, Y offset</_summary> - <_description>The Keyboard Preview, Y offset</_description> - </key> - <key name="width" type="i"> - <default>-1</default> - <_summary>The Keyboard Preview, width</_summary> - <_description>The Keyboard Preview, width</_description> - </key> - <key name="height" type="i"> - <default>-1</default> - <_summary>The Keyboard Preview, height</_summary> - <_description>The Keyboard Preview, height</_description> - </key> - </schema> - <schema id="org.mate.peripherals-keyboard-xkb.indicator" path="/org/mate/desktop/peripherals/keyboard/indicator/"> - <key name="secondary" type="i"> - <default>0</default> - <_summary>Secondary groups</_summary> - <_description>Secondary groups</_description> - </key> - <key name="show-flags" type="b"> - <default>false</default> - </key> - <key name="font-family" type="s"> - <default>''</default> - <_summary>The font</_summary> - <_description>The font for the layout indicator. This should be in "[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]" format.</_description> - </key> - <key name="foreground-color" type="s"> - <default>''</default> - <_summary>The foreground color</_summary> - <_description>The foreground color for the layout indicator. This should be in "R G B" format, for example "255 0 0".</_description> - </key> - <key name="background-color" type="s"> - <default>''</default> - <_summary>The background color</_summary> - <_description>The background color for the layout indicator. This should be in "R G B" format, for example "255 0 0".</_description> - </key> - </schema> -</schemalist> diff --git a/po/POTFILES.in b/po/POTFILES.in index 5bcf3ca..a5e7fff 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -5,6 +5,6 @@ libmatekbd/matekbd-keyboard-drawing.c libmatekbd/matekbd-keyboard-config.c libmatekbd/matekbd-status.c libmatekbd/matekbd-util.c -libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in.in +[type: gettext/gsettings]libmatekbd/org.mate.peripherals-keyboard-xkb.gschema.xml.in [type: gettext/glade]libmatekbd/show-layout.ui test/matekbd-indicator-test.c |