static void geometry_end_element_callback (GMarkupParseContext *pcontext, const gchar *element_name, gpointer user_data, GError **error) { GeometryParseData *data = user_data; GSList *head = data->element_stack; gint i; g_free (head->data); data->element_stack = g_slist_next (data->element_stack); g_slist_free1 (head); if (g_strcmp0 (element_name, "section") == 0) { data->section = NULL; data->num_rows = 0; return; } if (g_strcmp0 (element_name, "key") == 0) { data->key = NULL; return; } if (g_strcmp0 (element_name, "row") == 0) { data->num_columns = 0; data->orientation = EEK_ORIENTATION_HORIZONTAL; return; } if (g_strcmp0 (element_name, "outline") == 0) { EekOutline *outline = g_slice_new (EekOutline); outline->corner_radius = data->corner_radius; data->corner_radius = 0.0; outline->num_points = g_slist_length (data->points); outline->points = g_slice_alloc0 (sizeof (EekPoint) * outline->num_points); for (head = data->points = g_slist_reverse (data->points), i = 0; head && i < outline->num_points; head = g_slist_next (head), i++) { memcpy (&outline->points[i], head->data, sizeof (EekPoint)); g_slice_free1 (sizeof (EekPoint), head->data); } g_slist_free (data->points); data->points = NULL; g_hash_table_insert (data->oref_outline_hash, g_strdup (data->oref), outline); g_free (data->oref); return; } }
static gboolean validate (const gchar **valid_path_list, gsize valid_path_list_len, const gchar *element_name, GSList *element_stack, GError **error) { gint i; gchar *element_path; GSList *head, *p; GString *string; head = g_slist_prepend (element_stack, (gchar *)element_name); string = g_string_sized_new (64); for (p = head; p; p = p->next) { g_string_append (string, p->data); if (g_slist_next (p)) g_string_append (string, "/"); } element_path = g_string_free (string, FALSE); g_slist_free1 (head); for (i = 0; i < valid_path_list_len; i++) if (g_strcmp0 (element_path, valid_path_list[i]) == 0) break; g_free (element_path); if (i == valid_path_list_len) { gchar *reverse_element_path; head = g_slist_reverse (g_slist_copy (element_stack)); string = g_string_sized_new (64); for (p = head; p; p = p->next) { g_string_append (string, p->data); if (g_slist_next (p)) g_string_append (string, "/"); } reverse_element_path = g_string_free (string, FALSE); abort (); g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "%s cannot appear as %s", element_name, reverse_element_path); g_free (reverse_element_path); return FALSE; } return TRUE; }
static void keyboards_end_element_callback (GMarkupParseContext *pcontext, const gchar *element_name, gpointer user_data, GError **error) { KeyboardsParseData *data = user_data; GSList *head = data->element_stack; g_free (head->data); data->element_stack = g_slist_next (data->element_stack); g_slist_free1 (head); }
static void column_gone(gpointer data, GObject *where_the_object_was) { GwyCoordsView *view = (GwyCoordsView*)data; CoordsView *priv = view->priv; GSList *l = find_column_info(view, (GtkTreeViewColumn*)where_the_object_was); g_return_if_fail(l); priv->column_info = g_slist_remove_link(priv->column_info, l); ColumnInfo *column_info = (ColumnInfo*)l->data; column_info->column = NULL; GWY_FREE(column_info->title); g_slist_free1(l); }
static void prerequisites_end_element_callback (GMarkupParseContext *pcontext, const gchar *element_name, gpointer user_data, GError **error) { PrerequisitesParseData *data = user_data; GSList *head = data->element_stack; g_free (head->data); data->element_stack = g_slist_next (data->element_stack); g_slist_free1 (head); if (g_strcmp0 (element_name, "include") == 0) { data->prerequisites = g_list_append (data->prerequisites, g_strndup (data->text->str, data->text->len)); } }
GtkWidget* taglist_create (GSList *l, GSList **head) { GtkWidget *treeview; GtkListStore *store; GtkTreeIter iter; GtkCellRenderer *renderer; GtkTreeViewColumn *column; guint i; GSList *prev = *head, *p; /* create model */ store = gtk_list_store_new (2, G_TYPE_BOOLEAN, G_TYPE_STRING); for (i = 0; i < g_slist_length (l); i++) { LJTag *t = (LJTag *) g_slist_nth_data (l, i); gboolean check = FALSE; if (prev && (p = g_slist_find_custom(prev, t->tag, g_utf8_collate)) != NULL) { check = TRUE; prev = g_slist_remove_link(prev, p); g_free(p->data); g_slist_free1(p); } gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, check, 1, t->tag, -1); } /* rest of the typed tags */ for (p = prev; p; p = g_slist_next(p)) { gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, TRUE, 1, p->data, -1); } /* create treeview */ treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE); gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview), 1); /* add columns */ renderer = gtk_cell_renderer_toggle_new (); g_signal_connect (renderer, "toggled", G_CALLBACK (tag_toggled), GTK_TREE_MODEL (store)); column = gtk_tree_view_column_new_with_attributes ("#", renderer, "active", 0, NULL); gtk_tree_view_append_column (treeview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Tag name"), renderer, "text", 1, NULL); gtk_tree_view_column_set_cell_data_func(column, renderer, tags_set_fg, prev, NULL); gtk_tree_view_column_set_sort_column_id (column, 1); gtk_tree_view_append_column (treeview, column); /* update head of the prev list */ *head = prev; g_object_unref (store); return treeview; }
static void symbols_end_element_callback (GMarkupParseContext *pcontext, const gchar *element_name, gpointer user_data, GError **error) { SymbolsParseData *data = user_data; GSList *head = data->element_stack; gchar *text; gint i; g_free (head->data); data->element_stack = g_slist_next (data->element_stack); g_slist_free1 (head); text = g_strndup (data->text->str, data->text->len); if (g_strcmp0 (element_name, "key") == 0) { gint num_symbols = g_slist_length (data->symbols); gint levels = num_symbols / data->groups; EekSymbolMatrix *matrix = eek_symbol_matrix_new (data->groups, levels); head = data->symbols = g_slist_reverse (data->symbols); for (i = 0; i < num_symbols; i++) { if (head && head->data) { matrix->data[i] = head->data; head = g_slist_next (head); } else matrix->data[i] = NULL; } g_slist_free (data->symbols); data->symbols = NULL; eek_key_set_symbol_matrix (data->key, matrix); eek_symbol_matrix_free (matrix); data->key = NULL; goto out; } if (g_strcmp0 (element_name, "symbol") == 0 || g_strcmp0 (element_name, "keysym") == 0 || g_strcmp0 (element_name, "text") == 0) { EekSymbol *symbol; if (g_strcmp0 (element_name, "keysym") == 0) { EekKeysym *keysym; if (data->keyval != EEK_INVALID_KEYSYM) keysym = eek_keysym_new (data->keyval); else keysym = eek_keysym_new_from_name (text); symbol = EEK_SYMBOL(keysym); } else if (g_strcmp0 (element_name, "text") == 0) { symbol = EEK_SYMBOL(eek_text_new (text)); } else { symbol = eek_symbol_new (text); eek_symbol_set_category (symbol, EEK_SYMBOL_CATEGORY_KEYNAME); } if (data->label) { eek_symbol_set_label (symbol, data->label); g_free (data->label); data->label = NULL; } if (data->icon) { eek_symbol_set_icon_name (symbol, data->icon); g_free (data->icon); data->icon = NULL; } if (data->tooltip) { eek_symbol_set_tooltip (symbol, data->tooltip); g_free (data->tooltip); data->tooltip = NULL; } data->symbols = g_slist_prepend (data->symbols, symbol); goto out; } if (g_strcmp0 (element_name, "invalid") == 0) { data->symbols = g_slist_prepend (data->symbols, NULL); goto out; } out: g_free (text); }