Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Librem5
squeekboard
Commits
b2657c06
Commit
b2657c06
authored
Mar 02, 2011
by
Daiki Ueno
Browse files
Move symbol-index property per-element instead of per-keyboard.
parent
fccf9e88
Changes
9
Hide whitespace changes
Inline
Side-by-side
eek/eek-element.c
View file @
b2657c06
...
...
@@ -34,15 +34,25 @@
#include
"eek-element.h"
#include
"eek-container.h"
#include
"eek-marshalers.h"
#include
"eek-serializable.h"
enum
{
PROP_0
,
PROP_NAME
,
PROP_BOUNDS
,
PROP_GROUP
,
PROP_LEVEL
,
PROP_LAST
};
enum
{
SYMBOL_INDEX_CHANGED
,
LAST_SIGNAL
};
static
guint
signals
[
LAST_SIGNAL
]
=
{
0
,
};
static
void
eek_serializable_iface_init
(
EekSerializableIface
*
iface
);
G_DEFINE_ABSTRACT_TYPE_WITH_CODE
(
EekElement
,
eek_element
,
G_TYPE_OBJECT
,
...
...
@@ -58,6 +68,8 @@ struct _EekElementPrivate
gchar
*
name
;
EekBounds
bounds
;
EekElement
*
parent
;
gint
group
;
gint
level
;
};
static
GVariant
*
...
...
@@ -182,6 +194,41 @@ eek_element_real_get_bounds (EekElement *self,
g_object_notify
(
G_OBJECT
(
self
),
"bounds"
);
}
static
void
eek_element_real_set_symbol_index
(
EekElement
*
self
,
gint
group
,
gint
level
)
{
EekElementPrivate
*
priv
=
EEK_ELEMENT_GET_PRIVATE
(
self
);
if
(
priv
->
group
!=
group
||
priv
->
level
!=
level
)
{
priv
->
group
=
group
;
priv
->
level
=
level
;
g_signal_emit_by_name
(
self
,
"symbol-index-changed"
,
group
,
level
);
}
}
static
void
eek_element_real_get_symbol_index
(
EekElement
*
self
,
gint
*
group
,
gint
*
level
)
{
EekElementPrivate
*
priv
=
EEK_ELEMENT_GET_PRIVATE
(
self
);
if
(
group
)
*
group
=
priv
->
group
;
if
(
level
)
*
level
=
priv
->
level
;
}
static
void
eek_element_real_symbol_index_changed
(
EekElement
*
self
,
gint
group
,
gint
level
)
{
// g_debug ("symbol-index-changed");
}
static
void
eek_element_finalize
(
GObject
*
object
)
{
...
...
@@ -206,6 +253,13 @@ eek_element_set_property (GObject *object,
eek_element_set_bounds
(
EEK_ELEMENT
(
object
),
g_value_get_boxed
(
value
));
break
;
case
PROP_GROUP
:
eek_element_set_group
(
EEK_ELEMENT
(
object
),
g_value_get_int
(
value
));
break
;
case
PROP_LEVEL
:
eek_element_set_level
(
EEK_ELEMENT
(
object
),
g_value_get_int
(
value
));
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
object
,
prop_id
,
pspec
);
break
;
...
...
@@ -228,6 +282,12 @@ eek_element_get_property (GObject *object,
eek_element_get_bounds
(
EEK_ELEMENT
(
object
),
&
bounds
);
g_value_set_boxed
(
value
,
&
bounds
);
break
;
case
PROP_GROUP
:
g_value_set_int
(
value
,
eek_element_get_group
(
EEK_ELEMENT
(
object
)));
break
;
case
PROP_LEVEL
:
g_value_set_int
(
value
,
eek_element_get_level
(
EEK_ELEMENT
(
object
)));
break
;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
object
,
prop_id
,
pspec
);
break
;
...
...
@@ -249,6 +309,11 @@ eek_element_class_init (EekElementClass *klass)
klass
->
get_name
=
eek_element_real_get_name
;
klass
->
set_bounds
=
eek_element_real_set_bounds
;
klass
->
get_bounds
=
eek_element_real_get_bounds
;
klass
->
set_symbol_index
=
eek_element_real_set_symbol_index
;
klass
->
get_symbol_index
=
eek_element_real_get_symbol_index
;
/* signals */
klass
->
symbol_index_changed
=
eek_element_real_symbol_index_changed
;
gobject_class
->
set_property
=
eek_element_set_property
;
gobject_class
->
get_property
=
eek_element_get_property
;
...
...
@@ -281,6 +346,56 @@ eek_element_class_init (EekElementClass *klass)
g_object_class_install_property
(
gobject_class
,
PROP_BOUNDS
,
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
...
...
@@ -291,6 +406,8 @@ eek_element_init (EekElement *self)
priv
=
self
->
priv
=
EEK_ELEMENT_GET_PRIVATE
(
self
);
priv
->
name
=
NULL
;
memset
(
&
priv
->
bounds
,
0
,
sizeof
priv
->
bounds
);
priv
->
group
=
-
1
;
priv
->
level
=
-
1
;
}
/**
...
...
@@ -452,3 +569,117 @@ eek_element_set_size (EekElement *element,
bounds
.
height
=
height
;
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
)
{
g_return_if_fail
(
EEK_IS_ELEMENT
(
element
));
EEK_ELEMENT_GET_CLASS
(
element
)
->
set_symbol_index
(
element
,
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
||
level
);
EEK_ELEMENT_GET_CLASS
(
element
)
->
get_symbol_index
(
element
,
group
,
level
);
}
/**
* 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
)
{
gint
level
;
level
=
eek_element_get_level
(
element
);
eek_element_set_symbol_index
(
element
,
group
,
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
)
{
gint
group
;
group
=
eek_element_get_group
(
element
);
eek_element_set_symbol_index
(
element
,
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
)
{
gint
group
;
eek_element_get_symbol_index
(
element
,
&
group
,
NULL
);
return
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
)
{
gint
level
;
eek_element_get_symbol_index
(
element
,
NULL
,
&
level
);
return
level
;
}
eek/eek-element.h
View file @
b2657c06
...
...
@@ -46,23 +46,35 @@ struct _EekElementClass
{
/*< private >*/
GObjectClass
parent_class
;
void
(
*
set_parent
)
(
EekElement
*
self
,
EekElement
*
parent
);
EekElement
*
(
*
get_parent
)
(
EekElement
*
self
);
void
(
*
set_name
)
(
EekElement
*
self
,
const
gchar
*
name
);
void
(
*
set_parent
)
(
EekElement
*
self
,
EekElement
*
parent
);
EekElement
*
(
*
get_parent
)
(
EekElement
*
self
);
void
(
*
set_name
)
(
EekElement
*
self
,
const
gchar
*
name
);
G_CONST_RETURN
gchar
*
(
*
get_name
)
(
EekElement
*
self
);
G_CONST_RETURN
gchar
*
(
*
get_name
)
(
EekElement
*
self
);
void
(
*
set_bounds
)
(
EekElement
*
self
,
EekBounds
*
bounds
);
void
(
*
set_bounds
)
(
EekElement
*
self
,
EekBounds
*
bounds
);
void
(
*
get_bounds
)
(
EekElement
*
self
,
EekBounds
*
bounds
);
void
(
*
get_bounds
)
(
EekElement
*
self
,
EekBounds
*
bounds
);
void
(
*
set_symbol_index
)
(
EekElement
*
self
,
gint
group
,
gint
level
);
void
(
*
get_symbol_index
)
(
EekElement
*
self
,
gint
*
group
,
gint
*
level
);
/* signals */
void
(
*
symbol_index_changed
)
(
EekElement
*
self
,
gint
group
,
gint
level
);
/*< private >*/
/* padding */
gpointer
pdummy
[
2
4
];
gpointer
pdummy
[
2
1
];
};
GType
eek_element_get_type
(
void
)
G_GNUC_CONST
;
...
...
@@ -92,5 +104,18 @@ void eek_element_get_absolute_position (EekElement *element,
gdouble
*
x
,
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
#endif
/* EEK_ELEMENT_H */
eek/eek-key.c
View file @
b2657c06
...
...
@@ -550,20 +550,6 @@ eek_key_get_symbol_matrix (EekKey *key)
return
EEK_KEY_GET_CLASS
(
key
)
->
get_symbol_matrix
(
key
);
}
static
EekKeyboard
*
get_keyboard
(
EekKey
*
key
)
{
EekElement
*
parent
;
parent
=
eek_element_get_parent
(
EEK_ELEMENT
(
key
));
g_return_val_if_fail
(
EEK_IS_SECTION
(
parent
),
NULL
);
parent
=
eek_element_get_parent
(
parent
);
g_return_val_if_fail
(
EEK_IS_KEYBOARD
(
parent
),
NULL
);
return
EEK_KEYBOARD
(
parent
);
}
/**
* eek_key_get_symbol:
* @key: an #EekKey
...
...
@@ -592,14 +578,38 @@ eek_key_get_symbol_with_fallback (EekKey *key,
gint
fallback_level
)
{
gint
group
,
level
;
EekKeyboard
*
keyboard
;
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
);
keyboard
=
get_keyboard
(
key
);
g_return_val_if_fail
(
keyboard
,
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
);
}
}
eek_keyboard_get_symbol_index
(
keyboard
,
&
group
,
&
level
);
return
eek_key_get_symbol_at_index
(
key
,
group
,
level
,
...
...
@@ -628,8 +638,13 @@ eek_key_get_symbol_at_index (EekKey *key,
EekKeyPrivate
*
priv
=
EEK_KEY_GET_PRIVATE
(
key
);
gint
num_symbols
;
g_return_val_if_fail
(
group
>=
0
,
NULL
);
g_return_val_if_fail
(
level
>=
0
,
NULL
);
g_return_val_if_fail
(
fallback_group
>=
0
,
NULL
);
g_return_val_if_fail
(
fallback_level
>=
0
,
NULL
);
if
(
group
<
0
)
group
=
fallback_group
;
if
(
level
<
0
)
level
=
fallback_level
;
if
(
!
priv
->
symbol_matrix
)
return
NULL
;
...
...
eek/eek-keyboard.c
View file @
b2657c06
...
...
@@ -35,13 +35,10 @@
#include
"eek-section.h"
#include
"eek-key.h"
#include
"eek-symbol.h"
#include
"eek-marshalers.h"
#include
"eek-serializable.h"
enum
{
PROP_0
,
PROP_GROUP
,
PROP_LEVEL
,
PROP_LAYOUT
,
PROP_MODIFIER_BEHAVIOR
,
PROP_LAST
...
...
@@ -50,7 +47,6 @@ enum {
enum
{
KEY_PRESSED
,
KEY_RELEASED
,
SYMBOL_INDEX_CHANGED
,
LAST_SIGNAL
};
...
...
@@ -68,8 +64,6 @@ G_DEFINE_TYPE_WITH_CODE (EekKeyboard, eek_keyboard, EEK_TYPE_CONTAINER,
struct
_EekKeyboardPrivate
{
gint
group
;
gint
level
;
EekLayout
*
layout
;
EekModifierBehavior
modifier_behavior
;
EekModifierType
modifiers
;
...
...
@@ -184,35 +178,6 @@ eek_serializable_iface_init (EekSerializableIface *iface)
iface
->
deserialize
=
eek_keyboard_real_deserialize
;
}
static
void
eek_keyboard_real_set_symbol_index
(
EekKeyboard
*
self
,
gint
group
,
gint
level
)
{
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
self
);
if
(
priv
->
group
!=
group
||
priv
->
level
!=
level
)
{
priv
->
group
=
group
;
priv
->
level
=
level
;
g_signal_emit_by_name
(
self
,
"symbol-index-changed"
,
group
,
level
);
}
}
void
eek_keyboard_real_get_symbol_index
(
EekKeyboard
*
self
,
gint
*
group
,
gint
*
level
)
{
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
self
);
g_return_if_fail
(
group
||
level
);
if
(
group
)
*
group
=
priv
->
group
;
if
(
level
)
*
level
=
priv
->
level
;
}
static
void
on_key_pressed
(
EekSection
*
section
,
EekKey
*
key
,
...
...
@@ -283,12 +248,6 @@ eek_keyboard_set_property (GObject *object,
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
object
);
switch
(
prop_id
)
{
case
PROP_GROUP
:
eek_keyboard_set_group
(
EEK_KEYBOARD
(
object
),
g_value_get_int
(
value
));
break
;
case
PROP_LEVEL
:
eek_keyboard_set_level
(
EEK_KEYBOARD
(
object
),
g_value_get_int
(
value
));
break
;
case
PROP_LAYOUT
:
priv
->
layout
=
g_value_get_object
(
value
);
if
(
priv
->
layout
)
...
...
@@ -315,14 +274,6 @@ eek_keyboard_get_property (GObject *object,
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
object
);
switch
(
prop_id
)
{
case
PROP_GROUP
:
g_value_set_int
(
value
,
eek_keyboard_get_group
(
EEK_KEYBOARD
(
object
)));
break
;
case
PROP_LEVEL
:
g_value_set_int
(
value
,
eek_keyboard_get_level
(
EEK_KEYBOARD
(
object
)));
break
;
case
PROP_LAYOUT
:
g_value_set_object
(
value
,
priv
->
layout
);
break
;
...
...
@@ -338,25 +289,17 @@ eek_keyboard_get_property (GObject *object,
}
}
static
void
eek_keyboard_real_symbol_index_changed
(
EekKeyboard
*
self
,
gint
group
,
gint
level
)
{
/* g_debug ("symbol-index-changed"); */
}
static
void
set_level_from_modifiers
(
EekKeyboard
*
self
)
{
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
self
);
g
u
int
level
=
0
;
gint
level
=
0
;
if
(
priv
->
modifiers
&
EEK_MOD5_MASK
)
level
|=
2
;
if
(
priv
->
modifiers
&
EEK_SHIFT_MASK
)
level
|=
1
;
eek_
keyboard
_set_level
(
self
,
level
);
eek_
element
_set_level
(
EEK_ELEMENT
(
self
)
,
level
);
}
static
void
...
...
@@ -366,12 +309,10 @@ eek_keyboard_real_key_pressed (EekKeyboard *self,
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
self
);
EekSymbol
*
symbol
;
EekModifierType
modifier
;
gint
group
,
level
;
symbol
=
eek_key_get_symbol_at_index
(
key
,
priv
->
group
,
priv
->
level
,
0
,
0
);
eek_element_get_symbol_index
(
EEK_ELEMENT
(
self
),
&
group
,
&
level
);
symbol
=
eek_key_get_symbol_at_index
(
key
,
group
,
level
,
0
,
0
);
if
(
!
symbol
)
return
;
...
...
@@ -397,12 +338,10 @@ eek_keyboard_real_key_released (EekKeyboard *self,
EekKeyboardPrivate
*
priv
=
EEK_KEYBOARD_GET_PRIVATE
(
self
);
EekSymbol
*
symbol
;
EekModifierType
modifier
;
gint
group
,
level
;
symbol
=
eek_key_get_symbol_at_index
(
key
,
priv
->
group
,
priv
->
level
,
0
,
0
);
eek_element_get_symbol_index
(
EEK_ELEMENT
(
self
),
&
group
,
&
level
);
symbol
=
eek_key_get_symbol_at_index
(
key
,
group
,
level
,
0
,
0
);
if
(
!
symbol
)
return
;
...
...
@@ -473,15 +412,12 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
g_type_class_add_private
(
gobject_class
,
sizeof
(
EekKeyboardPrivate
));
klass
->
set_symbol_index
=
eek_keyboard_real_set_symbol_index
;
klass
->
get_symbol_index
=
eek_keyboard_real_get_symbol_index
;
klass
->
create_section
=
eek_keyboard_real_create_section
;
klass
->
find_key_by_keycode
=
eek_keyboard_real_find_key_by_keycode
;
/* signals */
klass
->
key_pressed
=
eek_keyboard_real_key_pressed
;
klass
->
key_released
=
eek_keyboard_real_key_released
;
klass
->
symbol_index_changed
=
eek_keyboard_real_symbol_index_changed
;
container_class
->
child_added
=
eek_keyboard_real_child_added
;
container_class
->
child_removed
=
eek_keyboard_real_child_removed
;
...
...
@@ -491,34 +427,6 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
gobject_class
->
dispose
=
eek_keyboard_dispose
;
gobject_class
->
finalize
=
eek_keyboard_finalize
;
/**
* EekKeyboard:group:
*
* The group (row) index of symbol matrix of #EekKeyboard.
*/
pspec
=
g_param_spec_int
(
"group"
,
"Group"
,
"Group index of symbol matrix of the keyboard"
,
0
,
G_MAXINT
,
0
,
G_PARAM_READWRITE
);
g_object_class_install_property
(
gobject_class
,
PROP_GROUP
,
pspec
);
/**
* EekKeyboard:level:
*
* The level (row) index of symbol matrix of #EekKeyboard.
*/
pspec
=
g_param_spec_int
(
"level"
,
"Level"
,
"Level index of symbol matrix of the keyboard"
,
0
,
G_MAXINT
,
0
,
G_PARAM_READWRITE
);
g_object_class_install_property
(
gobject_class
,