示例#1
0
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;
    }
}
示例#2
0
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;
}
示例#3
0
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);
}
示例#4
0
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);
}
示例#5
0
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));
    }
}
示例#6
0
文件: tags.c 项目: nightmorph/LogJam
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;
}
示例#7
0
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);
}