section: Elininate references
This commit is contained in:
@ -66,7 +66,7 @@ struct _EekKeyboardPrivate
|
||||
char dummy; // won't run otherwise
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (EekKeyboard, eek_keyboard, EEK_TYPE_CONTAINER);
|
||||
G_DEFINE_TYPE_WITH_PRIVATE (EekKeyboard, eek_keyboard, EEK_TYPE_ELEMENT);
|
||||
|
||||
G_DEFINE_BOXED_TYPE(EekModifierKey, eek_modifier_key,
|
||||
eek_modifier_key_copy, eek_modifier_key_free);
|
||||
@ -83,17 +83,12 @@ eek_modifier_key_free (EekModifierKey *modkey)
|
||||
g_slice_free (EekModifierKey, modkey);
|
||||
}
|
||||
|
||||
EekSection *
|
||||
eek_keyboard_real_create_section (EekKeyboard *self)
|
||||
struct squeek_row *
|
||||
eek_keyboard_real_create_row (EekKeyboard *self)
|
||||
{
|
||||
EekSection *section;
|
||||
|
||||
section = g_object_new (EEK_TYPE_SECTION, NULL);
|
||||
g_return_val_if_fail (section, NULL);
|
||||
|
||||
EEK_CONTAINER_GET_CLASS(self)->add_child (EEK_CONTAINER(self),
|
||||
EEK_ELEMENT(section));
|
||||
return section;
|
||||
struct squeek_row *row = squeek_row_new(0);
|
||||
g_ptr_array_add(self->rows, row);
|
||||
return row;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -278,13 +273,9 @@ eek_keyboard_real_child_removed (EekContainer *self,
|
||||
static void
|
||||
eek_keyboard_class_init (EekKeyboardClass *klass)
|
||||
{
|
||||
EekContainerClass *container_class = EEK_CONTAINER_CLASS (klass);
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
/* signals */
|
||||
container_class->child_added = eek_keyboard_real_child_added;
|
||||
container_class->child_removed = eek_keyboard_real_child_removed;
|
||||
|
||||
gobject_class->get_property = eek_keyboard_get_property;
|
||||
gobject_class->set_property = eek_keyboard_set_property;
|
||||
gobject_class->dispose = eek_keyboard_dispose;
|
||||
@ -294,8 +285,14 @@ eek_keyboard_class_init (EekKeyboardClass *klass)
|
||||
static void
|
||||
eek_keyboard_init (EekKeyboard *self)
|
||||
{
|
||||
self->priv = EEK_KEYBOARD_GET_PRIVATE(self);
|
||||
self->scale = 1.0;
|
||||
self->rows = g_ptr_array_new();
|
||||
}
|
||||
|
||||
void eek_keyboard_foreach (EekKeyboard *keyboard,
|
||||
GFunc func,
|
||||
gpointer user_data) {
|
||||
g_ptr_array_foreach(keyboard->rows, func, user_data);
|
||||
}
|
||||
|
||||
void level_keyboard_init(LevelKeyboard *self) {
|
||||
@ -431,42 +428,42 @@ EekKeyboard *level_keyboard_current(LevelKeyboard *keyboard)
|
||||
return keyboard->views[keyboard->level];
|
||||
}
|
||||
|
||||
struct GetSectionData {
|
||||
struct GetRowData {
|
||||
struct squeek_button *button;
|
||||
EekSection *section;
|
||||
struct squeek_row *row;
|
||||
struct squeek_key *needle;
|
||||
};
|
||||
|
||||
void find_button_in_section(EekElement *element, gpointer user_data) {
|
||||
EekSection *section = EEK_SECTION(element);
|
||||
struct GetSectionData *data = user_data;
|
||||
if (data->section) {
|
||||
void find_button_in_row(gpointer item, gpointer user_data) {
|
||||
struct squeek_row *row = item;
|
||||
struct GetRowData *data = user_data;
|
||||
if (data->row) {
|
||||
return;
|
||||
}
|
||||
if (eek_section_find(section, data->button)) {
|
||||
data->section = section;
|
||||
if (squeek_row_contains(row, data->button)) {
|
||||
data->row = row;
|
||||
}
|
||||
}
|
||||
|
||||
EekSection *eek_keyboard_get_section(EekKeyboard *keyboard,
|
||||
struct squeek_row *eek_keyboard_get_row(EekKeyboard *keyboard,
|
||||
struct squeek_button *button) {
|
||||
struct GetSectionData data = {
|
||||
struct GetRowData data = {
|
||||
.button = button,
|
||||
.section = NULL,
|
||||
.row = NULL,
|
||||
};
|
||||
eek_container_foreach_child(EEK_CONTAINER(keyboard), find_button_in_section, &data);
|
||||
return data.section;
|
||||
eek_keyboard_foreach(keyboard, find_button_in_row, &data);
|
||||
return data.row;
|
||||
}
|
||||
|
||||
void find_key_in_section(EekElement *element, gpointer user_data) {
|
||||
EekSection *section = EEK_SECTION(element);
|
||||
struct GetSectionData *data = user_data;
|
||||
void find_key_in_row(gpointer item, gpointer user_data) {
|
||||
struct squeek_row *row = item;
|
||||
struct GetRowData *data = user_data;
|
||||
if (data->button) {
|
||||
return;
|
||||
}
|
||||
data->button = eek_section_find_key(section, data->needle);
|
||||
data->button = squeek_row_find_key(row, data->needle);
|
||||
if (data->button) {
|
||||
data->section = section;
|
||||
data->row = row;
|
||||
}
|
||||
}
|
||||
|
||||
@ -474,14 +471,14 @@ void find_key_in_section(EekElement *element, gpointer user_data) {
|
||||
// TODO: return multiple
|
||||
struct button_place eek_keyboard_get_button_by_state(EekKeyboard *keyboard,
|
||||
struct squeek_key *key) {
|
||||
struct GetSectionData data = {
|
||||
.section = NULL,
|
||||
struct GetRowData data = {
|
||||
.row = NULL,
|
||||
.button = NULL,
|
||||
.needle = key,
|
||||
};
|
||||
eek_container_foreach_child(EEK_CONTAINER(keyboard), find_key_in_section, &data);
|
||||
eek_keyboard_foreach(keyboard, find_key_in_row, &data);
|
||||
struct button_place ret = {
|
||||
.section = data.section,
|
||||
.row = data.row,
|
||||
.button = data.button,
|
||||
};
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user