level: Remove level from elements
This commit is contained in:
		@ -38,8 +38,6 @@ enum {
 | 
				
			|||||||
    PROP_0,
 | 
					    PROP_0,
 | 
				
			||||||
    PROP_NAME,
 | 
					    PROP_NAME,
 | 
				
			||||||
    PROP_BOUNDS,
 | 
					    PROP_BOUNDS,
 | 
				
			||||||
    PROP_GROUP,
 | 
					 | 
				
			||||||
    PROP_LEVEL,
 | 
					 | 
				
			||||||
    PROP_LAST
 | 
					    PROP_LAST
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -55,20 +53,10 @@ typedef struct _EekElementPrivate
 | 
				
			|||||||
    gchar *name;
 | 
					    gchar *name;
 | 
				
			||||||
    EekBounds bounds;
 | 
					    EekBounds bounds;
 | 
				
			||||||
    EekElement *parent;
 | 
					    EekElement *parent;
 | 
				
			||||||
    gint group;
 | 
					 | 
				
			||||||
    gint level;
 | 
					 | 
				
			||||||
} EekElementPrivate;
 | 
					} EekElementPrivate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekElement, eek_element, G_TYPE_OBJECT)
 | 
					G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekElement, eek_element, G_TYPE_OBJECT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
eek_element_real_symbol_index_changed (EekElement *self,
 | 
					 | 
				
			||||||
                                       gint        group,
 | 
					 | 
				
			||||||
                                       gint        level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    // g_debug ("symbol-index-changed");
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eek_element_finalize (GObject *object)
 | 
					eek_element_finalize (GObject *object)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -95,12 +83,6 @@ eek_element_set_property (GObject      *object,
 | 
				
			|||||||
    case PROP_BOUNDS:
 | 
					    case PROP_BOUNDS:
 | 
				
			||||||
        eek_element_set_bounds (element, g_value_get_boxed (value));
 | 
					        eek_element_set_bounds (element, g_value_get_boxed (value));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_GROUP:
 | 
					 | 
				
			||||||
        eek_element_set_group (element, g_value_get_int (value));
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case PROP_LEVEL:
 | 
					 | 
				
			||||||
        eek_element_set_level (element, g_value_get_int (value));
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -124,12 +106,6 @@ eek_element_get_property (GObject    *object,
 | 
				
			|||||||
        eek_element_get_bounds (element, &bounds);
 | 
					        eek_element_get_bounds (element, &bounds);
 | 
				
			||||||
        g_value_set_boxed (value, &bounds);
 | 
					        g_value_set_boxed (value, &bounds);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_GROUP:
 | 
					 | 
				
			||||||
        g_value_set_int (value, eek_element_get_group (element));
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    case PROP_LEVEL:
 | 
					 | 
				
			||||||
        g_value_set_int (value, eek_element_get_level (element));
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
					        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@ -143,8 +119,6 @@ eek_element_class_init (EekElementClass *klass)
 | 
				
			|||||||
    GParamSpec        *pspec;
 | 
					    GParamSpec        *pspec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* signals */
 | 
					    /* signals */
 | 
				
			||||||
    klass->symbol_index_changed = eek_element_real_symbol_index_changed;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    gobject_class->set_property = eek_element_set_property;
 | 
					    gobject_class->set_property = eek_element_set_property;
 | 
				
			||||||
    gobject_class->get_property = eek_element_get_property;
 | 
					    gobject_class->get_property = eek_element_get_property;
 | 
				
			||||||
    gobject_class->finalize     = eek_element_finalize;
 | 
					    gobject_class->finalize     = eek_element_finalize;
 | 
				
			||||||
@ -176,65 +150,12 @@ eek_element_class_init (EekElementClass *klass)
 | 
				
			|||||||
    g_object_class_install_property (gobject_class,
 | 
					    g_object_class_install_property (gobject_class,
 | 
				
			||||||
                                     PROP_BOUNDS,
 | 
					                                     PROP_BOUNDS,
 | 
				
			||||||
                                     pspec);
 | 
					                                     pspec);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * EekElement:group:
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * The group value of the symbol index of #EekElement.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    pspec = g_param_spec_int ("group",
 | 
					 | 
				
			||||||
                              "Group",
 | 
					 | 
				
			||||||
                              "Group value of the symbol index",
 | 
					 | 
				
			||||||
                              -1, G_MAXINT, -1,
 | 
					 | 
				
			||||||
                              G_PARAM_READWRITE);
 | 
					 | 
				
			||||||
    g_object_class_install_property (gobject_class,
 | 
					 | 
				
			||||||
                                     PROP_GROUP,
 | 
					 | 
				
			||||||
                                     pspec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * EekElement:level:
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * The level value of the symbol index of #EekElement.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    pspec = g_param_spec_int ("level",
 | 
					 | 
				
			||||||
                              "Level",
 | 
					 | 
				
			||||||
                              "Level value of the symbol index",
 | 
					 | 
				
			||||||
                              -1, G_MAXINT, -1,
 | 
					 | 
				
			||||||
                              G_PARAM_READWRITE);
 | 
					 | 
				
			||||||
    g_object_class_install_property (gobject_class,
 | 
					 | 
				
			||||||
                                     PROP_LEVEL,
 | 
					 | 
				
			||||||
                                     pspec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * EekElement::symbol-index-changed:
 | 
					 | 
				
			||||||
     * @element: an #EekElement
 | 
					 | 
				
			||||||
     * @group: row index of the symbol matrix of keys on @element
 | 
					 | 
				
			||||||
     * @level: column index of the symbol matrix of keys on @element
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * The ::symbol-index-changed signal is emitted each time the
 | 
					 | 
				
			||||||
     * global configuration of group/level index changes.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    signals[SYMBOL_INDEX_CHANGED] =
 | 
					 | 
				
			||||||
        g_signal_new (I_("symbol-index-changed"),
 | 
					 | 
				
			||||||
                      G_TYPE_FROM_CLASS(gobject_class),
 | 
					 | 
				
			||||||
                      G_SIGNAL_RUN_LAST,
 | 
					 | 
				
			||||||
                      G_STRUCT_OFFSET(EekElementClass, symbol_index_changed),
 | 
					 | 
				
			||||||
                      NULL,
 | 
					 | 
				
			||||||
                      NULL,
 | 
					 | 
				
			||||||
                      _eek_marshal_VOID__INT_INT,
 | 
					 | 
				
			||||||
                      G_TYPE_NONE,
 | 
					 | 
				
			||||||
                      2,
 | 
					 | 
				
			||||||
                      G_TYPE_INT,
 | 
					 | 
				
			||||||
                      G_TYPE_INT);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
eek_element_init (EekElement *self)
 | 
					eek_element_init (EekElement *self)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    EekElementPrivate *priv = eek_element_get_instance_private (self);
 | 
					    (void)self;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    priv->group = -1;
 | 
					 | 
				
			||||||
    priv->level = -1;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -428,144 +349,3 @@ eek_element_set_size (EekElement  *element,
 | 
				
			|||||||
    bounds.height = height;
 | 
					    bounds.height = height;
 | 
				
			||||||
    eek_element_set_bounds (element, &bounds);
 | 
					    eek_element_set_bounds (element, &bounds);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_element_set_symbol_index:
 | 
					 | 
				
			||||||
 * @element: an #EekElement
 | 
					 | 
				
			||||||
 * @group: row index of the symbol matrix
 | 
					 | 
				
			||||||
 * @level: column index of the symbol matrix
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Set the default index of the symbol matrices of @element.  The
 | 
					 | 
				
			||||||
 * setting affects the child, if child does not have the index set, as
 | 
					 | 
				
			||||||
 * well as this element.  To unset, pass -1 as group/level.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
eek_element_set_symbol_index (EekElement *element,
 | 
					 | 
				
			||||||
                              gint        group,
 | 
					 | 
				
			||||||
                              gint        level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    gboolean emit_signal;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    emit_signal = group != eek_element_get_group (element) ||
 | 
					 | 
				
			||||||
        level != eek_element_get_level (element);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    eek_element_set_group (element, group);
 | 
					 | 
				
			||||||
    eek_element_set_level (element, level);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (emit_signal)
 | 
					 | 
				
			||||||
        g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0, group, level);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_element_get_symbol_index:
 | 
					 | 
				
			||||||
 * @element: an #EekElement
 | 
					 | 
				
			||||||
 * @group: a pointer where the group value of the symbol index will be stored
 | 
					 | 
				
			||||||
 * @level: a pointer where the level value of the symbol index will be stored
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Get the default index of the symbol matrices of @element.
 | 
					 | 
				
			||||||
 * If the index is not set, -1 will be returned.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
eek_element_get_symbol_index (EekElement *element,
 | 
					 | 
				
			||||||
                              gint       *group,
 | 
					 | 
				
			||||||
                              gint       *level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
					 | 
				
			||||||
    g_return_if_fail (group != NULL || level != NULL);
 | 
					 | 
				
			||||||
    if (group != NULL)
 | 
					 | 
				
			||||||
        *group = eek_element_get_group (element);
 | 
					 | 
				
			||||||
    if (level != NULL)
 | 
					 | 
				
			||||||
        *level = eek_element_get_level (element);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_element_set_group:
 | 
					 | 
				
			||||||
 * @element: an #EekElement
 | 
					 | 
				
			||||||
 * @group: group index of @element
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Set the group value of the default symbol index of @element.  To
 | 
					 | 
				
			||||||
 * unset, pass -1 as @group.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See also: eek_element_set_symbol_index()
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
eek_element_set_group (EekElement *element,
 | 
					 | 
				
			||||||
                       gint        group)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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, priv->level);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_element_set_level:
 | 
					 | 
				
			||||||
 * @element: an #EekElement
 | 
					 | 
				
			||||||
 * @level: level index of @element
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Set the level value of the default symbol index of @element.  To
 | 
					 | 
				
			||||||
 * unset, pass -1 as @level.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See also: eek_element_set_symbol_index()
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
eek_element_set_level (EekElement *element,
 | 
					 | 
				
			||||||
                       gint        level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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,
 | 
					 | 
				
			||||||
                       priv->group, level);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_element_get_group:
 | 
					 | 
				
			||||||
 * @element: an #EekElement
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Return the group value of the default symbol index of @element.
 | 
					 | 
				
			||||||
 * If the value is not set, -1 will be returned.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See also: eek_element_get_symbol_index()
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gint
 | 
					 | 
				
			||||||
eek_element_get_group (EekElement *element)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    EekElementPrivate *priv = eek_element_get_instance_private (element);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return priv->group;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_element_get_level:
 | 
					 | 
				
			||||||
 * @element: an #EekElement
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Return the level value of the default symbol index of @element.
 | 
					 | 
				
			||||||
 * If the value is not set, -1 will be returned.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See also: eek_element_get_symbol_index()
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
gint
 | 
					 | 
				
			||||||
eek_element_get_level (EekElement *element)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    EekElementPrivate *priv = eek_element_get_instance_private (element);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return priv->level;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -36,11 +36,6 @@ struct _EekElementClass
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    /*< private >*/
 | 
					    /*< private >*/
 | 
				
			||||||
    GObjectClass parent_class;
 | 
					    GObjectClass parent_class;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* signals */
 | 
					 | 
				
			||||||
    void                  (* symbol_index_changed) (EekElement  *self,
 | 
					 | 
				
			||||||
                                                    gint         group,
 | 
					 | 
				
			||||||
                                                    gint         level);
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GType        eek_element_get_type              (void) G_GNUC_CONST;
 | 
					GType        eek_element_get_type              (void) G_GNUC_CONST;
 | 
				
			||||||
@ -70,18 +65,5 @@ void         eek_element_get_absolute_position (EekElement  *element,
 | 
				
			|||||||
                                                gdouble     *x,
 | 
					                                                gdouble     *x,
 | 
				
			||||||
                                                gdouble     *y);
 | 
					                                                gdouble     *y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void         eek_element_set_symbol_index      (EekElement  *element,
 | 
					 | 
				
			||||||
                                                gint         group,
 | 
					 | 
				
			||||||
                                                gint         level);
 | 
					 | 
				
			||||||
void         eek_element_get_symbol_index      (EekElement  *element,
 | 
					 | 
				
			||||||
                                                gint        *group,
 | 
					 | 
				
			||||||
                                                gint        *level);
 | 
					 | 
				
			||||||
void         eek_element_set_group             (EekElement  *element,
 | 
					 | 
				
			||||||
                                                gint         group);
 | 
					 | 
				
			||||||
void         eek_element_set_level             (EekElement  *element,
 | 
					 | 
				
			||||||
                                                gint         level);
 | 
					 | 
				
			||||||
gint         eek_element_get_group             (EekElement  *element);
 | 
					 | 
				
			||||||
gint         eek_element_get_level             (EekElement  *element);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
#endif  /* EEK_ELEMENT_H */
 | 
					#endif  /* EEK_ELEMENT_H */
 | 
				
			||||||
 | 
				
			|||||||
@ -113,7 +113,7 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
					    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint level = eek_element_get_level(EEK_ELEMENT(priv->keyboard));
 | 
					    uint level = priv->keyboard->level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* redraw pressed key */
 | 
					    /* redraw pressed key */
 | 
				
			||||||
    list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
					    list = eek_keyboard_get_pressed_keys (priv->keyboard);
 | 
				
			||||||
@ -156,7 +156,7 @@ static void depress(EekGtkKeyboard *self,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (key) {
 | 
					    if (key) {
 | 
				
			||||||
        eek_keyboard_press_key(priv->keyboard, key, time);
 | 
					        eek_keyboard_press_key(priv->keyboard, key, time);
 | 
				
			||||||
        guint level = eek_element_get_level(EEK_ELEMENT(priv->keyboard));
 | 
					        guint level = priv->keyboard->level;
 | 
				
			||||||
        on_key_pressed(key, self, level);
 | 
					        on_key_pressed(key, self, level);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -184,7 +184,7 @@ static void drag(EekGtkKeyboard *self,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (!found) {
 | 
					        if (!found) {
 | 
				
			||||||
            eek_keyboard_press_key(priv->keyboard, key, time);
 | 
					            eek_keyboard_press_key(priv->keyboard, key, time);
 | 
				
			||||||
            guint level = eek_element_get_level(EEK_ELEMENT(priv->keyboard));
 | 
					            guint level = priv->keyboard->level;
 | 
				
			||||||
            on_key_pressed(key, self, level);
 | 
					            on_key_pressed(key, self, level);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
@ -313,7 +313,7 @@ eek_gtk_keyboard_real_query_tooltip (GtkWidget  *widget,
 | 
				
			|||||||
                                             (gdouble)x,
 | 
					                                             (gdouble)x,
 | 
				
			||||||
                                             (gdouble)y);
 | 
					                                             (gdouble)y);
 | 
				
			||||||
    if (key) {
 | 
					    if (key) {
 | 
				
			||||||
        EekSymbol *symbol = eek_key_get_symbol (key);
 | 
					        EekSymbol *symbol = eek_key_get_symbol_at_index(key, 0, priv->keyboard->level);
 | 
				
			||||||
        const gchar *text = eek_symbol_get_tooltip (symbol);
 | 
					        const gchar *text = eek_symbol_get_tooltip (symbol);
 | 
				
			||||||
        if (text) {
 | 
					        if (text) {
 | 
				
			||||||
            gtk_tooltip_set_text (tooltip, text);
 | 
					            gtk_tooltip_set_text (tooltip, text);
 | 
				
			||||||
 | 
				
			|||||||
@ -269,73 +269,6 @@ eek_key_get_symbol_matrix (EekKey *key)
 | 
				
			|||||||
    return priv->symbols;
 | 
					    return priv->symbols;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_key_get_symbol:
 | 
					 | 
				
			||||||
 * @key: an #EekKey
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Get the current symbol of @key.
 | 
					 | 
				
			||||||
 * Return value: (transfer none): the current #EekSymbol or %NULL on failure
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
EekSymbol *
 | 
					 | 
				
			||||||
eek_key_get_symbol (EekKey *key)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return eek_key_get_symbol_with_fallback (key, 0, 0);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * eek_key_get_symbol_with_fallback:
 | 
					 | 
				
			||||||
 * @key: an #EekKey
 | 
					 | 
				
			||||||
 * @fallback_group: fallback group index
 | 
					 | 
				
			||||||
 * @fallback_level: fallback level index
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Get the current symbol of @key.
 | 
					 | 
				
			||||||
 * Return value: (transfer none): the current #EekSymbol or %NULL on failure
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
EekSymbol *
 | 
					 | 
				
			||||||
eek_key_get_symbol_with_fallback (EekKey *key,
 | 
					 | 
				
			||||||
                                  gint    fallback_group,
 | 
					 | 
				
			||||||
                                  gint    fallback_level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    gint group, level;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_return_val_if_fail (EEK_IS_KEY (key), NULL);
 | 
					 | 
				
			||||||
    g_return_val_if_fail (fallback_group >= 0, NULL);
 | 
					 | 
				
			||||||
    g_return_val_if_fail (fallback_level >= 0, NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    eek_element_get_symbol_index (EEK_ELEMENT(key), &group, &level);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (group < 0 || level < 0) {
 | 
					 | 
				
			||||||
        EekElement *section;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        section = eek_element_get_parent (EEK_ELEMENT(key));
 | 
					 | 
				
			||||||
        g_return_val_if_fail (EEK_IS_SECTION (section), NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (group < 0)
 | 
					 | 
				
			||||||
            group = eek_element_get_group (section);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (level < 0)
 | 
					 | 
				
			||||||
            level = eek_element_get_level (section);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (group < 0 || level < 0) {
 | 
					 | 
				
			||||||
            EekElement *keyboard;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            keyboard = eek_element_get_parent (section);
 | 
					 | 
				
			||||||
            g_return_val_if_fail (EEK_IS_KEYBOARD (keyboard), NULL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (group < 0)
 | 
					 | 
				
			||||||
                group = eek_element_get_group (keyboard);
 | 
					 | 
				
			||||||
            if (level < 0)
 | 
					 | 
				
			||||||
                level = eek_element_get_level (keyboard);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return eek_key_get_symbol_at_index (key,
 | 
					 | 
				
			||||||
                                        group,
 | 
					 | 
				
			||||||
                                        level,
 | 
					 | 
				
			||||||
                                        fallback_group,
 | 
					 | 
				
			||||||
                                        fallback_level);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * eek_key_get_symbol_at_index:
 | 
					 * eek_key_get_symbol_at_index:
 | 
				
			||||||
 * @key: an #EekKey
 | 
					 * @key: an #EekKey
 | 
				
			||||||
@ -350,14 +283,9 @@ eek_key_get_symbol_with_fallback (EekKey *key,
 | 
				
			|||||||
struct squeek_symbol*
 | 
					struct squeek_symbol*
 | 
				
			||||||
eek_key_get_symbol_at_index (EekKey *key,
 | 
					eek_key_get_symbol_at_index (EekKey *key,
 | 
				
			||||||
                             gint    group,
 | 
					                             gint    group,
 | 
				
			||||||
                             gint    level,
 | 
					                             guint    level)
 | 
				
			||||||
                             guint    fallback_group,
 | 
					 | 
				
			||||||
                             guint    fallback_level)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct squeek_symbols *symbols = eek_key_get_symbol_matrix(key);
 | 
					    struct squeek_symbols *symbols = eek_key_get_symbol_matrix(key);
 | 
				
			||||||
    if (level < 0) {
 | 
					 | 
				
			||||||
        level = fallback_level;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return squeek_symbols_get(symbols, level);
 | 
					    return squeek_symbols_get(symbols, level);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -60,16 +60,9 @@ void             eek_key_set_keycode         (EekKey          *key,
 | 
				
			|||||||
guint            eek_key_get_keycode         (EekKey          *key);
 | 
					guint            eek_key_get_keycode         (EekKey          *key);
 | 
				
			||||||
struct squeek_symbols *
 | 
					struct squeek_symbols *
 | 
				
			||||||
eek_key_get_symbol_matrix (EekKey *key);
 | 
					eek_key_get_symbol_matrix (EekKey *key);
 | 
				
			||||||
EekSymbol       *eek_key_get_symbol          (EekKey          *key);
 | 
					 | 
				
			||||||
EekSymbol       *eek_key_get_symbol_with_fallback
 | 
					 | 
				
			||||||
                                             (EekKey          *key,
 | 
					 | 
				
			||||||
                                              gint             fallback_group,
 | 
					 | 
				
			||||||
                                              gint             fallback_level);
 | 
					 | 
				
			||||||
struct squeek_symbol *eek_key_get_symbol_at_index (EekKey          *key,
 | 
					struct squeek_symbol *eek_key_get_symbol_at_index (EekKey          *key,
 | 
				
			||||||
                                              gint             group,
 | 
					                                              gint             group,
 | 
				
			||||||
                                              gint level,
 | 
					                                              guint level);
 | 
				
			||||||
                                              guint fallback_group,
 | 
					 | 
				
			||||||
                                              guint fallback_level);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
void             eek_key_set_oref            (EekKey          *key,
 | 
					void             eek_key_set_oref            (EekKey          *key,
 | 
				
			||||||
                                              guint            oref);
 | 
					                                              guint            oref);
 | 
				
			||||||
 | 
				
			|||||||
@ -115,15 +115,6 @@ on_key_unlocked (EekSection  *section,
 | 
				
			|||||||
    g_signal_emit (keyboard, signals[KEY_UNLOCKED], 0, key);
 | 
					    g_signal_emit (keyboard, signals[KEY_UNLOCKED], 0, key);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
on_symbol_index_changed (EekSection *section,
 | 
					 | 
				
			||||||
                         gint group,
 | 
					 | 
				
			||||||
                         gint level,
 | 
					 | 
				
			||||||
                         EekKeyboard *keyboard)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    g_signal_emit_by_name (keyboard, "symbol-index-changed", group, level);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
section_child_added_cb (EekContainer *container,
 | 
					section_child_added_cb (EekContainer *container,
 | 
				
			||||||
                        EekElement   *element,
 | 
					                        EekElement   *element,
 | 
				
			||||||
@ -251,7 +242,7 @@ set_level_from_modifiers (EekKeyboard *self, EekKey *key)
 | 
				
			|||||||
        priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LATCH;
 | 
					        priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_LATCH;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    priv->old_level = level;
 | 
					    priv->old_level = level;
 | 
				
			||||||
    eek_element_set_level (EEK_ELEMENT(self), level);
 | 
					    self->level = level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eek_layout_update_layout(self);
 | 
					    eek_layout_update_layout(self);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -302,7 +293,7 @@ void eek_keyboard_press_key(EekKeyboard *keyboard, EekKey *key, guint32 timestam
 | 
				
			|||||||
    priv->pressed_keys = g_list_prepend (priv->pressed_keys, key);
 | 
					    priv->pressed_keys = g_list_prepend (priv->pressed_keys, key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct squeek_symbol *symbol = eek_key_get_symbol_at_index(
 | 
					    struct squeek_symbol *symbol = eek_key_get_symbol_at_index(
 | 
				
			||||||
        key, 0, eek_element_get_level (EEK_ELEMENT(keyboard)), 0, 0
 | 
					        key, 0, keyboard->level
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    if (!symbol)
 | 
					    if (!symbol)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
@ -335,8 +326,7 @@ void eek_keyboard_release_key( EekKeyboard *keyboard,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct squeek_symbol *symbol = eek_key_get_symbol_at_index(
 | 
					    struct squeek_symbol *symbol = eek_key_get_symbol_at_index(
 | 
				
			||||||
        key, 0, eek_element_get_level (EEK_ELEMENT(keyboard)), 0, 0
 | 
					        key, 0, keyboard->level);
 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    if (!symbol)
 | 
					    if (!symbol)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -404,8 +394,6 @@ eek_keyboard_real_child_added (EekContainer *self,
 | 
				
			|||||||
                      G_CALLBACK(on_key_locked), self);
 | 
					                      G_CALLBACK(on_key_locked), self);
 | 
				
			||||||
    g_signal_connect (element, "key-unlocked",
 | 
					    g_signal_connect (element, "key-unlocked",
 | 
				
			||||||
                      G_CALLBACK(on_key_unlocked), self);
 | 
					                      G_CALLBACK(on_key_unlocked), self);
 | 
				
			||||||
    g_signal_connect (element, "symbol-index-changed",
 | 
					 | 
				
			||||||
                      G_CALLBACK(on_symbol_index_changed), self);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
@ -495,7 +483,7 @@ eek_keyboard_init (EekKeyboard *self)
 | 
				
			|||||||
    self->priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_NONE;
 | 
					    self->priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_NONE;
 | 
				
			||||||
    self->priv->outline_array = g_array_new (FALSE, TRUE, sizeof (EekOutline));
 | 
					    self->priv->outline_array = g_array_new (FALSE, TRUE, sizeof (EekOutline));
 | 
				
			||||||
    self->priv->names = g_hash_table_new (g_str_hash, g_str_equal);
 | 
					    self->priv->names = g_hash_table_new (g_str_hash, g_str_equal);
 | 
				
			||||||
    eek_element_set_symbol_index (EEK_ELEMENT(self), 0, 0);
 | 
					    self->level = 0;
 | 
				
			||||||
    self->scale = 1.0;
 | 
					    self->scale = 1.0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -63,6 +63,7 @@ struct _EekKeyboard
 | 
				
			|||||||
    int keymap_fd; // keymap formatted as XKB string
 | 
					    int keymap_fd; // keymap formatted as XKB string
 | 
				
			||||||
    size_t keymap_len; // length of the data inside keymap_fd
 | 
					    size_t keymap_len; // length of the data inside keymap_fd
 | 
				
			||||||
    double scale;
 | 
					    double scale;
 | 
				
			||||||
 | 
					    guint level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    EekboardContextService *manager; // unowned reference
 | 
					    EekboardContextService *manager; // unowned reference
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -62,7 +62,6 @@ typedef struct _EekRendererPrivate
 | 
				
			|||||||
    GHashTable *active_outline_surface_cache;
 | 
					    GHashTable *active_outline_surface_cache;
 | 
				
			||||||
    GHashTable *icons;
 | 
					    GHashTable *icons;
 | 
				
			||||||
    cairo_surface_t *keyboard_surface;
 | 
					    cairo_surface_t *keyboard_surface;
 | 
				
			||||||
    gulong symbol_index_changed_handler;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
} EekRendererPrivate;
 | 
					} EekRendererPrivate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -178,7 +177,7 @@ render_keyboard_surface (EekRenderer *renderer)
 | 
				
			|||||||
                           foreground.blue,
 | 
					                           foreground.blue,
 | 
				
			||||||
                           foreground.alpha);
 | 
					                           foreground.alpha);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    data.level = eek_element_get_level(EEK_ELEMENT(priv->keyboard));
 | 
					    data.level = priv->keyboard->level;
 | 
				
			||||||
    /* draw sections */
 | 
					    /* draw sections */
 | 
				
			||||||
    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
					    eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
 | 
				
			||||||
                                 create_keyboard_surface_section_callback,
 | 
					                                 create_keyboard_surface_section_callback,
 | 
				
			||||||
@ -280,7 +279,7 @@ render_key (EekRenderer *self,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    eek_renderer_get_foreground_color (self, priv->key_context, &foreground);
 | 
					    eek_renderer_get_foreground_color (self, priv->key_context, &foreground);
 | 
				
			||||||
    /* render icon (if any) */
 | 
					    /* render icon (if any) */
 | 
				
			||||||
    symbol = eek_key_get_symbol_at_index (key, 0, level, 0, 0);
 | 
					    symbol = eek_key_get_symbol_at_index (key, 0, level);
 | 
				
			||||||
    if (!symbol)
 | 
					    if (!symbol)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -394,7 +393,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
 | 
				
			|||||||
    PangoLayoutLine *line;
 | 
					    PangoLayoutLine *line;
 | 
				
			||||||
    gdouble scale;
 | 
					    gdouble scale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    symbol = eek_key_get_symbol_at_index(key, 0, level, 0, 0);
 | 
					    symbol = eek_key_get_symbol_at_index(key, 0, level);
 | 
				
			||||||
    if (!symbol)
 | 
					    if (!symbol)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -531,11 +530,6 @@ eek_renderer_set_property (GObject      *object,
 | 
				
			|||||||
    case PROP_KEYBOARD:
 | 
					    case PROP_KEYBOARD:
 | 
				
			||||||
        priv->keyboard = g_value_get_object (value);
 | 
					        priv->keyboard = g_value_get_object (value);
 | 
				
			||||||
        g_object_ref (priv->keyboard);
 | 
					        g_object_ref (priv->keyboard);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        priv->symbol_index_changed_handler =
 | 
					 | 
				
			||||||
            g_signal_connect (priv->keyboard, "symbol-index-changed",
 | 
					 | 
				
			||||||
                              G_CALLBACK(on_symbol_index_changed),
 | 
					 | 
				
			||||||
                              object);
 | 
					 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case PROP_PCONTEXT:
 | 
					    case PROP_PCONTEXT:
 | 
				
			||||||
        priv->pcontext = g_value_get_object (value);
 | 
					        priv->pcontext = g_value_get_object (value);
 | 
				
			||||||
@ -577,10 +571,6 @@ eek_renderer_dispose (GObject *object)
 | 
				
			|||||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
					    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->keyboard) {
 | 
					    if (priv->keyboard) {
 | 
				
			||||||
        if (g_signal_handler_is_connected (priv->keyboard,
 | 
					 | 
				
			||||||
                                           priv->symbol_index_changed_handler))
 | 
					 | 
				
			||||||
            g_signal_handler_disconnect (priv->keyboard,
 | 
					 | 
				
			||||||
                                         priv->symbol_index_changed_handler);
 | 
					 | 
				
			||||||
        g_object_unref (priv->keyboard);
 | 
					        g_object_unref (priv->keyboard);
 | 
				
			||||||
        priv->keyboard = NULL;
 | 
					        priv->keyboard = NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -679,7 +669,6 @@ eek_renderer_init (EekRenderer *self)
 | 
				
			|||||||
                               NULL,
 | 
					                               NULL,
 | 
				
			||||||
                               (GDestroyNotify)cairo_surface_destroy);
 | 
					                               (GDestroyNotify)cairo_surface_destroy);
 | 
				
			||||||
    priv->keyboard_surface = NULL;
 | 
					    priv->keyboard_surface = NULL;
 | 
				
			||||||
    priv->symbol_index_changed_handler = 0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GtkIconTheme *theme = gtk_icon_theme_get_default ();
 | 
					    GtkIconTheme *theme = gtk_icon_theme_get_default ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -733,7 +733,6 @@ symbols_end_element_callback (GMarkupParseContext *pcontext,
 | 
				
			|||||||
    SymbolsParseData *data = user_data;
 | 
					    SymbolsParseData *data = user_data;
 | 
				
			||||||
    GSList *head = data->element_stack;
 | 
					    GSList *head = data->element_stack;
 | 
				
			||||||
    gchar *text;
 | 
					    gchar *text;
 | 
				
			||||||
    gint i;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    g_free (head->data);
 | 
					    g_free (head->data);
 | 
				
			||||||
    data->element_stack = g_slist_next (data->element_stack);
 | 
					    data->element_stack = g_slist_next (data->element_stack);
 | 
				
			||||||
 | 
				
			|||||||
@ -91,7 +91,7 @@ send_fake_key (SeatEmitter *emitter,
 | 
				
			|||||||
               uint32_t timestamp)
 | 
					               uint32_t timestamp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t proto_modifiers = 0;
 | 
					    uint32_t proto_modifiers = 0;
 | 
				
			||||||
    guint level = eek_element_get_level(EEK_ELEMENT(keyboard));
 | 
					    guint level = keyboard->level;
 | 
				
			||||||
    uint32_t group = (level / 2);
 | 
					    uint32_t group = (level / 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (keyboard_modifiers & EEK_SHIFT_MASK)
 | 
					    if (keyboard_modifiers & EEK_SHIFT_MASK)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user