Compare commits
	
		
			8 Commits
		
	
	
		
			eekboard-0
			...
			eekboard-0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| cf4d1109d3 | |||
| c7c6d06907 | |||
| 384d43bb80 | |||
| 29c55b6ca3 | |||
| 910b0be5a5 | |||
| 706fa6310b | |||
| 248699d771 | |||
| 6343e37bc1 | 
@ -16,12 +16,13 @@
 | 
			
		||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | 
			
		||||
# 02110-1301 USA
 | 
			
		||||
 | 
			
		||||
AC_INIT([eekboard], [0.0.6], [ueno@unixuser.org])
 | 
			
		||||
AC_INIT([eekboard], [0.0.7], [ueno@unixuser.org])
 | 
			
		||||
AC_CONFIG_SRCDIR([configure.ac])
 | 
			
		||||
AC_PREREQ(2.63)
 | 
			
		||||
AM_INIT_AUTOMAKE
 | 
			
		||||
AM_PROG_CC_C_O
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
 | 
			
		||||
LT_INIT
 | 
			
		||||
IT_PROG_INTLTOOL([0.35.0])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -123,7 +123,8 @@ eek_gtk_keyboard_finalize (GObject *object)
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(object);
 | 
			
		||||
    gint i;
 | 
			
		||||
 | 
			
		||||
    g_hash_table_unref (priv->key_surfaces);
 | 
			
		||||
    cairo_surface_destroy (priv->keyboard_surface);
 | 
			
		||||
    g_hash_table_destroy (priv->key_surfaces);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < EEK_KEYSYM_CATEGORY_LAST; i++)
 | 
			
		||||
        pango_font_description_free (priv->fonts[i]);
 | 
			
		||||
@ -357,7 +358,7 @@ redraw_keyboard (cairo_t        *cr,
 | 
			
		||||
 | 
			
		||||
        prepare_keyboard_surface (keyboard);
 | 
			
		||||
    }
 | 
			
		||||
    g_return_val_if_fail (priv->keyboard_surface, FALSE);
 | 
			
		||||
    g_return_if_fail (priv->keyboard_surface);
 | 
			
		||||
 | 
			
		||||
    gdk_cairo_set_source_color (cr, &style->fg[state]);
 | 
			
		||||
 | 
			
		||||
@ -464,8 +465,8 @@ redraw_key (cairo_t        *cr,
 | 
			
		||||
        gdk_cairo_set_source_color (cr, &style->fg[state]);
 | 
			
		||||
 | 
			
		||||
        cairo_scale (cr,
 | 
			
		||||
                     key_surface_scale[KEY_SURFACE_LARGE],
 | 
			
		||||
                     key_surface_scale[KEY_SURFACE_LARGE]);
 | 
			
		||||
                     priv->scale * key_surface_scale[KEY_SURFACE_LARGE],
 | 
			
		||||
                     priv->scale * key_surface_scale[KEY_SURFACE_LARGE]);
 | 
			
		||||
        eek_draw_key_label (cr, key, priv->fonts);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
@ -492,11 +493,13 @@ on_key_released (EekKey *key, gpointer user_data)
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
 | 
			
		||||
    if (priv->key) {
 | 
			
		||||
        cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
 | 
			
		||||
        redraw_key (cr, priv->key, KEY_SURFACE_NORMAL, keyboard);
 | 
			
		||||
        cairo_destroy (cr);
 | 
			
		||||
        priv->key = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (priv->widget)));
 | 
			
		||||
    redraw_key (cr, key, KEY_SURFACE_NORMAL, keyboard);
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
}
 | 
			
		||||
@ -583,6 +586,7 @@ on_size_allocate (GtkWidget     *widget,
 | 
			
		||||
        cairo_surface_destroy (priv->keyboard_surface);
 | 
			
		||||
        priv->keyboard_surface = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    g_hash_table_remove_all (priv->key_surfaces);
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
 | 
			
		||||
    priv->scale = allocation->width > allocation->height ?
 | 
			
		||||
 | 
			
		||||
@ -538,7 +538,6 @@ eek_keyboard_find_key_by_position (EekKeyboard *keyboard,
 | 
			
		||||
                                   gdouble      y)
 | 
			
		||||
{
 | 
			
		||||
    FkbpData data;
 | 
			
		||||
    EekSection *section;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
 | 
			
		||||
 | 
			
		||||
@ -632,9 +632,13 @@ eek_xkb_layout_set_names_full (EekXkbLayout *layout,
 | 
			
		||||
                               ...)
 | 
			
		||||
{
 | 
			
		||||
    va_list var_args;
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
 | 
			
		||||
    va_start (var_args, layout);
 | 
			
		||||
    eek_xkb_layout_set_names_full_valist (layout, var_args);
 | 
			
		||||
    retval = eek_xkb_layout_set_names_full_valist (layout, var_args);
 | 
			
		||||
    va_end (var_args);
 | 
			
		||||
 | 
			
		||||
    return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -244,23 +244,6 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
 | 
			
		||||
    g_object_class_install_property (gobject_class, PROP_OPTIONS, pspec);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Disabled since the current EekXklLayout implementation does not
 | 
			
		||||
   change the server setting. */
 | 
			
		||||
#if 0
 | 
			
		||||
static void
 | 
			
		||||
on_state_changed (XklEngine           *xklengine,
 | 
			
		||||
                  XklEngineStateChange type,
 | 
			
		||||
                  gint                 value,
 | 
			
		||||
                  gboolean             restore,
 | 
			
		||||
                  gpointer             user_data)
 | 
			
		||||
{
 | 
			
		||||
    EekLayout *layout = user_data;
 | 
			
		||||
 | 
			
		||||
    if (type == GROUP_CHANGED)
 | 
			
		||||
        g_signal_emit_by_name (layout, "group_changed", value);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_xkl_layout_init (EekXklLayout *self)
 | 
			
		||||
{
 | 
			
		||||
@ -274,13 +257,6 @@ eek_xkl_layout_init (EekXklLayout *self)
 | 
			
		||||
    g_return_if_fail (display);
 | 
			
		||||
 | 
			
		||||
    priv->engine = xkl_engine_get_instance (display);
 | 
			
		||||
    /* Disabled since the current EekXklLayout implementation does not
 | 
			
		||||
       change the server setting. */
 | 
			
		||||
#if 0
 | 
			
		||||
    g_signal_connect (priv->engine, "X-state-changed",
 | 
			
		||||
                      G_CALLBACK(on_state_changed), self);
 | 
			
		||||
    xkl_engine_start_listen (priv->engine, XKLL_TRACK_KEYBOARD_STATE);
 | 
			
		||||
#endif
 | 
			
		||||
    xkl_config_rec_get_from_server (priv->config, priv->engine);
 | 
			
		||||
    set_xkb_component_names (self, priv->config);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -229,7 +229,7 @@ static gboolean opt_version = FALSE;
 | 
			
		||||
#if HAVE_CLUTTER_GTK
 | 
			
		||||
static gchar *opt_toolkit = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
static gboolean opt_standalone = FALSE;
 | 
			
		||||
static gboolean opt_popup = FALSE;
 | 
			
		||||
static gchar *opt_config = NULL;
 | 
			
		||||
 | 
			
		||||
static const GOptionEntry options[] = {
 | 
			
		||||
@ -249,8 +249,8 @@ static const GOptionEntry options[] = {
 | 
			
		||||
    {"toolkit", 't', 0, G_OPTION_ARG_STRING, &opt_toolkit,
 | 
			
		||||
     N_("Toolkit (\"clutter\" or \"gtk\")")},
 | 
			
		||||
#endif
 | 
			
		||||
    {"standalone", 's', 0, G_OPTION_ARG_NONE, &opt_standalone,
 | 
			
		||||
     N_("Start as a standalone application")},
 | 
			
		||||
    {"popup", 'p', 0, G_OPTION_ARG_NONE, &opt_popup,
 | 
			
		||||
     N_("Start as a popup window")},
 | 
			
		||||
    {"config", 'c', 0, G_OPTION_ARG_STRING, &opt_config,
 | 
			
		||||
     N_("Specify configuration file")},
 | 
			
		||||
    {"version", 'v', 0, G_OPTION_ARG_NONE, &opt_version,
 | 
			
		||||
@ -293,6 +293,7 @@ on_quit (gpointer user_data)
 | 
			
		||||
    if (eekboard->fakekey)
 | 
			
		||||
        fakekey_release (eekboard->fakekey);
 | 
			
		||||
    eekboard_free (eekboard);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -417,7 +418,7 @@ on_key_pressed (EekKeyboard *keyboard,
 | 
			
		||||
{
 | 
			
		||||
    Eekboard *eekboard = user_data;
 | 
			
		||||
    gint group, level;
 | 
			
		||||
    guint keysym, modifiers = 0;
 | 
			
		||||
    guint keysym;
 | 
			
		||||
 | 
			
		||||
    keysym = eek_key_get_keysym (key);
 | 
			
		||||
    EEKBOARD_NOTE("%s %X", eek_keysym_to_string (keysym), eekboard->modifiers);
 | 
			
		||||
@ -425,7 +426,7 @@ on_key_pressed (EekKeyboard *keyboard,
 | 
			
		||||
    switch (keysym) {
 | 
			
		||||
    case XK_Shift_L:
 | 
			
		||||
    case XK_Shift_R:
 | 
			
		||||
        eekboard->modifiers ^= ShiftMask;
 | 
			
		||||
        eekboard->modifiers |= ShiftMask;
 | 
			
		||||
        eek_keyboard_get_keysym_index (keyboard, &group, &level);
 | 
			
		||||
        eek_keyboard_set_keysym_index (keyboard, group,
 | 
			
		||||
                                       (eekboard->modifiers & Mod5Mask) ? 2 :
 | 
			
		||||
@ -433,7 +434,7 @@ on_key_pressed (EekKeyboard *keyboard,
 | 
			
		||||
                                       0);
 | 
			
		||||
        break;
 | 
			
		||||
    case XK_ISO_Level3_Shift:
 | 
			
		||||
        eekboard->modifiers ^= Mod5Mask;
 | 
			
		||||
        eekboard->modifiers |= Mod5Mask;
 | 
			
		||||
        eek_keyboard_get_keysym_index (keyboard, &group, &level);
 | 
			
		||||
        eek_keyboard_set_keysym_index (keyboard, group,
 | 
			
		||||
                                       (eekboard->modifiers & Mod5Mask) ? 2 :
 | 
			
		||||
@ -442,14 +443,17 @@ on_key_pressed (EekKeyboard *keyboard,
 | 
			
		||||
        break;
 | 
			
		||||
    case XK_Control_L:
 | 
			
		||||
    case XK_Control_R:
 | 
			
		||||
        eekboard->modifiers ^= ControlMask;
 | 
			
		||||
        eekboard->modifiers |= ControlMask;
 | 
			
		||||
        break;
 | 
			
		||||
    case XK_Alt_L:
 | 
			
		||||
    case XK_Alt_R:
 | 
			
		||||
        eekboard->modifiers ^= Mod1Mask;
 | 
			
		||||
        eekboard->modifiers |= Mod1Mask;
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        fakekey_press_keysym (eekboard->fakekey, keysym, eekboard->modifiers);
 | 
			
		||||
        eekboard->modifiers = 0;
 | 
			
		||||
        eek_keyboard_get_keysym_index (keyboard, &group, &level);
 | 
			
		||||
        eek_keyboard_set_keysym_index (keyboard, group, 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1143,6 +1147,37 @@ parse_layouts (XklConfigRec *rec, const gchar *_layouts)
 | 
			
		||||
    rec->variants = variants;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GdkFilterReturn
 | 
			
		||||
filter_xkl_event (GdkXEvent * xev,
 | 
			
		||||
                  GdkEvent *  event,
 | 
			
		||||
                  gpointer    user_data)
 | 
			
		||||
{
 | 
			
		||||
        XEvent *xevent = (XEvent *) xev;
 | 
			
		||||
        Eekboard *eekboard = user_data;
 | 
			
		||||
 | 
			
		||||
        xkl_engine_filter_events (eekboard->engine, xevent);
 | 
			
		||||
        return GDK_FILTER_CONTINUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_xkl_config_changed (XklEngine *xklengine,
 | 
			
		||||
                       gpointer   user_data)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_xkl_state_changed (XklEngine           *xklengine,
 | 
			
		||||
                      XklEngineStateChange type,
 | 
			
		||||
                      gint                 value,
 | 
			
		||||
                      gboolean             restore,
 | 
			
		||||
                      gpointer             user_data)
 | 
			
		||||
{
 | 
			
		||||
    Eekboard *eekboard = user_data;
 | 
			
		||||
 | 
			
		||||
    if (type == GROUP_CHANGED)
 | 
			
		||||
        g_signal_emit_by_name (eekboard->layout, "group_changed", value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Eekboard *
 | 
			
		||||
eekboard_new (gboolean use_clutter,
 | 
			
		||||
              gboolean need_swap_event_workaround,
 | 
			
		||||
@ -1200,6 +1235,18 @@ eekboard_new (gboolean use_clutter,
 | 
			
		||||
    eekboard->engine = xkl_engine_get_instance (eekboard->display);
 | 
			
		||||
    eekboard->registry = xkl_config_registry_get_instance (eekboard->engine);
 | 
			
		||||
    xkl_config_registry_load (eekboard->registry, FALSE);
 | 
			
		||||
    g_signal_connect (eekboard->engine, "X-config-changed",
 | 
			
		||||
                      G_CALLBACK(on_xkl_config_changed), eekboard);
 | 
			
		||||
    g_signal_connect (eekboard->engine, "X-state-changed",
 | 
			
		||||
                      G_CALLBACK(on_xkl_state_changed), eekboard);
 | 
			
		||||
 | 
			
		||||
    gdk_window_add_filter (NULL,
 | 
			
		||||
                           (GdkFilterFunc)filter_xkl_event,
 | 
			
		||||
                           eekboard);
 | 
			
		||||
    gdk_window_add_filter (gdk_get_default_root_window (),
 | 
			
		||||
                           (GdkFilterFunc) filter_xkl_event,
 | 
			
		||||
                           eekboard);
 | 
			
		||||
    xkl_engine_start_listen (eekboard->engine, XKLL_TRACK_KEYBOARD_STATE);
 | 
			
		||||
 | 
			
		||||
    return eekboard;
 | 
			
		||||
}
 | 
			
		||||
@ -1363,7 +1410,7 @@ config_parser_start_element (GMarkupParseContext *pcontext,
 | 
			
		||||
        config->rec = xkl_config_rec_new ();
 | 
			
		||||
        context->list = g_slist_prepend (context->list, config);
 | 
			
		||||
    } else
 | 
			
		||||
        context->text = g_string_sized_new (100);
 | 
			
		||||
        context->text->len = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -1388,8 +1435,7 @@ config_parser_end_element (GMarkupParseContext *pcontext,
 | 
			
		||||
    if (!context->text)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    text = g_string_free (context->text, FALSE);
 | 
			
		||||
    context->text = NULL;
 | 
			
		||||
    text = g_strndup (context->text->str, context->text->len);
 | 
			
		||||
 | 
			
		||||
    if (g_strcmp0 (element_name, "name") == 0)
 | 
			
		||||
        config->name = text;
 | 
			
		||||
@ -1409,8 +1455,7 @@ config_parser_text (GMarkupParseContext *pcontext,
 | 
			
		||||
                    GError             **error)
 | 
			
		||||
{
 | 
			
		||||
    ConfigContext *context = user_data;
 | 
			
		||||
    if (context->text)
 | 
			
		||||
        context->text = g_string_append_len (context->text, text, text_len);
 | 
			
		||||
    context->text = g_string_append_len (context->text, text, text_len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GMarkupParser config_parser = {
 | 
			
		||||
@ -1531,7 +1576,6 @@ main (int argc, char *argv[])
 | 
			
		||||
        GSList *head;
 | 
			
		||||
        gint i;
 | 
			
		||||
 | 
			
		||||
        memset (&context, 0, sizeof context);
 | 
			
		||||
        file = g_file_new_for_path (opt_config);
 | 
			
		||||
 | 
			
		||||
        error = NULL;
 | 
			
		||||
@ -1542,6 +1586,8 @@ main (int argc, char *argv[])
 | 
			
		||||
            exit (1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        context.list = NULL;
 | 
			
		||||
        context.text = g_string_sized_new (BUFSIZ);
 | 
			
		||||
        pcontext = g_markup_parse_context_new (&config_parser,
 | 
			
		||||
                                               0,
 | 
			
		||||
                                               &context,
 | 
			
		||||
@ -1565,6 +1611,7 @@ main (int argc, char *argv[])
 | 
			
		||||
        error = NULL;
 | 
			
		||||
        g_markup_parse_context_end_parse (pcontext, &error);
 | 
			
		||||
        g_markup_parse_context_free (pcontext);
 | 
			
		||||
        g_string_free (context.text, TRUE);
 | 
			
		||||
        g_object_unref (file);
 | 
			
		||||
 | 
			
		||||
        if (context.list) {
 | 
			
		||||
@ -1576,9 +1623,9 @@ main (int argc, char *argv[])
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    window = gtk_window_new (opt_standalone ?
 | 
			
		||||
                             GTK_WINDOW_TOPLEVEL :
 | 
			
		||||
                             GTK_WINDOW_POPUP);
 | 
			
		||||
    window = gtk_window_new (opt_popup ?
 | 
			
		||||
                             GTK_WINDOW_POPUP :
 | 
			
		||||
                             GTK_WINDOW_TOPLEVEL);
 | 
			
		||||
    gtk_widget_set_can_focus (window, FALSE);
 | 
			
		||||
    g_object_set (G_OBJECT(window), "accept_focus", FALSE, NULL);
 | 
			
		||||
    gtk_window_set_title (GTK_WINDOW(window), "Keyboard");
 | 
			
		||||
@ -1590,7 +1637,7 @@ main (int argc, char *argv[])
 | 
			
		||||
    g_object_set_data (G_OBJECT(window), "eekboard", eekboard);
 | 
			
		||||
    widget = create_widget (eekboard, CSW, CSH);
 | 
			
		||||
 | 
			
		||||
    if (opt_standalone) {
 | 
			
		||||
    if (!opt_popup) {
 | 
			
		||||
        create_menus (eekboard, window);
 | 
			
		||||
        menubar = gtk_ui_manager_get_widget (eekboard->ui_manager, "/MainMenu");
 | 
			
		||||
        gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
 | 
			
		||||
@ -1632,7 +1679,7 @@ main (int argc, char *argv[])
 | 
			
		||||
    eekboard->window = window;
 | 
			
		||||
    eekboard->gconfc = gconfc;
 | 
			
		||||
    if (eekboard->accessibility_enabled) {
 | 
			
		||||
        if (!opt_standalone) {
 | 
			
		||||
        if (opt_popup) {
 | 
			
		||||
            NotifyNotification *notification;
 | 
			
		||||
 | 
			
		||||
            error = NULL;
 | 
			
		||||
@ -1663,9 +1710,8 @@ main (int argc, char *argv[])
 | 
			
		||||
 
 | 
			
		||||
            gtk_widget_hide (window);
 | 
			
		||||
 | 
			
		||||
            focusListener =
 | 
			
		||||
                SPI_createAccessibleEventListener (a11y_focus_listener,
 | 
			
		||||
                                                   eekboard);
 | 
			
		||||
            focusListener = SPI_createAccessibleEventListener ((AccessibleEventListenerCB)a11y_focus_listener,
 | 
			
		||||
                                                               eekboard);
 | 
			
		||||
            SPI_registerGlobalEventListener (focusListener,
 | 
			
		||||
                                             "object:state-changed:focused");
 | 
			
		||||
            SPI_registerGlobalEventListener (focusListener,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user