introspection: Build with --warn-fatal, drop fix-meta-rectangle.py hack

Cleanly build with --warn-fatal.  Implementation:

* Liberally apply (skip) where the API is clearly C only, e.g. uses
  XLib.  The theming code and MutterPlugin are skipped too.
* Add missing (transfer) and (element-type) annotations

For a few functions that had a comment, I turned it into gtk-doc, but
I didn't (with a few exceptions) try to write new documentation in
this pass.
This commit is contained in:
Colin Walters 2010-09-01 15:39:53 -04:00
parent 599eb5e3e4
commit 4c0763792d
19 changed files with 370 additions and 41 deletions

View File

@ -214,6 +214,7 @@ Meta-$(api_version).gir: $(G_IR_SCANNER) mutter $(libmutterinclude_HEADERS) $(mu
--namespace=Meta \
--nsversion=$(api_version) \
--warn-all \
--warn-error \
--accept-unprefixed \
--include=GObject-2.0 \
--include=Gdk-@GTK_API_VERSION@ \
@ -224,13 +225,11 @@ Meta-$(api_version).gir: $(G_IR_SCANNER) mutter $(libmutterinclude_HEADERS) $(mu
--include=xlib-2.0 \
--include=xfixes-4.0 \
--program=$$pwd/mutter \
mutter-enum-types.h \
$(filter %.c,$(mutter_SOURCES)) \
$(libmutterinclude_base_headers) \
$(INCLUDES) \
-o $$pwd/$@.tmp && \
$(PYTHON) $(srcdir)/fix-meta-rectangle.py $$pwd/$@.tmp $$pwd/$@.tmp2 && \
rm $$pwd/$@.tmp && \
mv $$pwd/$@.tmp2 $$pwd/$@
-o $@
Meta-$(api_version).typelib: $(G_IR_COMPILER) Meta-$(api_version).gir
$(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) Meta-$(api_version).gir -o $@
@ -307,7 +306,6 @@ EXTRA_DIST=$(desktopfiles_files) \
$(desktopfiles_in_files) \
$(wmproperties_in_files) \
$(schema_in_files) \
fix-meta-rectangle.py \
libmutter-private.pc.in \
mutter-plugins.pc.in \
mutter-enum-types.h.in \

View File

@ -191,6 +191,12 @@ get_output_window (MetaScreen *screen)
return output;
}
/**
* mutter_get_stage_for_screen:
* @screen: a #MetaScreen
*
* Returns: (transfer none): The #ClutterStage for the screen
*/
ClutterActor *
mutter_get_stage_for_screen (MetaScreen *screen)
{
@ -202,6 +208,12 @@ mutter_get_stage_for_screen (MetaScreen *screen)
return info->stage;
}
/**
* mutter_get_overlay_group_for_screen:
* @screen: a #MetaScreen
*
* Returns: (transfer none): The overlay group corresponding to @screen
*/
ClutterActor *
mutter_get_overlay_group_for_screen (MetaScreen *screen)
{
@ -213,6 +225,12 @@ mutter_get_overlay_group_for_screen (MetaScreen *screen)
return info->overlay_group;
}
/**
* mutter_get_window_group_for_screen:
* @screen: a #MetaScreen
*
* Returns: (transfer none): The window group corresponding to @screen
*/
ClutterActor *
mutter_get_window_group_for_screen (MetaScreen *screen)
{
@ -224,6 +242,12 @@ mutter_get_window_group_for_screen (MetaScreen *screen)
return info->window_group;
}
/**
* mutter_get_windows:
* @screen: a #MetaScreen
*
* Returns: (transfer none) (element-type Clutter.Actor): The windows on @screen
*/
GList *
mutter_get_windows (MetaScreen *screen)
{
@ -592,7 +616,10 @@ is_grabbed_event (XEvent *event)
return FALSE;
}
/**
* meta_compositor_process_event: (skip)
*
*/
gboolean
meta_compositor_process_event (MetaCompositor *compositor,
XEvent *event,
@ -997,6 +1024,10 @@ mutter_repaint_func (gpointer data)
return TRUE;
}
/**
* meta_compositor_new: (skip)
*
*/
MetaCompositor *
meta_compositor_new (MetaDisplay *display)
{
@ -1034,6 +1065,10 @@ meta_compositor_new (MetaDisplay *display)
return compositor;
}
/**
* mutter_get_overlay_window: (skip)
*
*/
Window
mutter_get_overlay_window (MetaScreen *screen)
{

View File

@ -40,6 +40,10 @@
#define MUTTER_PLUGIN_ALL_EFFECTS (~0)
/**
* MutterPluginManager: (skip)
*
*/
typedef struct MutterPluginManager MutterPluginManager;
MutterPluginManager * mutter_plugin_manager_get (MetaScreen *screen);

View File

@ -651,6 +651,10 @@ mutter_window_has_shadow (MutterWindow *self)
return FALSE;
}
/**
* mutter_window_get_x_window: (skip)
*
*/
Window
mutter_window_get_x_window (MutterWindow *self)
{

View File

@ -529,7 +529,12 @@ compare_rect_areas (gconstpointer a, gconstpointer b)
return b_area - a_area; /* positive ret value denotes b > a, ... */
}
/* This function is trying to find a "minimal spanning set (of rectangles)"
/**
* meta_rectangle_get_minimal_spanning_set_for_region:
* @basic_rect: Input rectangle
* @all_struts: (element-type Meta.Rectangle): List of struts
*
* This function is trying to find a "minimal spanning set (of rectangles)"
* for a given region.
*
* The region is given by taking basic_rect, then removing the areas
@ -542,10 +547,7 @@ compare_rect_areas (gconstpointer a, gconstpointer b)
* the region if and only if it is contained within at least one of the
* rectangles.
*
* The GList* returned will be a list of (allocated) MetaRectangles.
* The list will need to be freed by calling
* meta_rectangle_free_spanning_set() on it (or by manually
* implementing that function...)
* Returns: (transfer full) (element-type Meta.Rectangle): Minimal spanning set
*/
GList*
meta_rectangle_get_minimal_spanning_set_for_region (
@ -678,6 +680,10 @@ meta_rectangle_get_minimal_spanning_set_for_region (
return ret;
}
/**
* meta_rectangle_expand_region: (skip)
*
*/
GList*
meta_rectangle_expand_region (GList *region,
const int left_expand,
@ -694,6 +700,10 @@ meta_rectangle_expand_region (GList *region,
0);
}
/**
* meta_rectangle_expand_region_conditionally: (skip)
*
*/
GList*
meta_rectangle_expand_region_conditionally (GList *region,
const int left_expand,
@ -1671,7 +1681,10 @@ fix_up_edges (MetaRectangle *rect, MetaEdge *edge,
}
}
/* This function removes intersections of edges with the rectangles from the
/**
* meta_rectangle_remove_intersections_with_boxes_from_edges: (skip)
*
* This function removes intersections of edges with the rectangles from the
* list of edges.
*/
GList*
@ -1737,7 +1750,11 @@ meta_rectangle_remove_intersections_with_boxes_from_edges (
return edges;
}
/* This function is trying to find all the edges of an onscreen region. */
/**
* meta_rectangle_find_onscreen_edges: (skip)
*
* This function is trying to find all the edges of an onscreen region.
*/
GList*
meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
const GSList *all_struts)
@ -1820,6 +1837,10 @@ meta_rectangle_find_onscreen_edges (const MetaRectangle *basic_rect,
return ret;
}
/**
* meta_rectangle_find_nonintersected_monitor_edges: (skip)
*
*/
GList*
meta_rectangle_find_nonintersected_monitor_edges (
const GList *monitor_rects,

View File

@ -4550,6 +4550,18 @@ find_tab_backward (MetaDisplay *display,
return NULL;
}
/**
* meta_display_get_tab_list:
* @display: a #MetaDisplay
* @type: type of tab list
* @screen: a #MetaScreen
* @workspace: origin workspace
*
* Determine the list of windows that should be displayed for Alt-TAB
* functionality. The windows are returned in most recently used order.
*
* Returns: (transfer container) (element-type Meta.Window): List of windows
*/
GList*
meta_display_get_tab_list (MetaDisplay *display,
MetaTabList type,
@ -4627,6 +4639,21 @@ meta_display_get_tab_list (MetaDisplay *display,
return tab_list;
}
/**
* meta_display_get_tab_next:
* @display: a #MetaDisplay
* @type: type of tab list
* @screen: a #MetaScreen
* @workspace: origin workspace
* @window: (allow-none): starting window
* @backward: If %TRUE, look for the previous window.
*
* Determine the next window that should be displayed for Alt-TAB
* functionality.
*
* Returns: (transfer none): Next window
*
*/
MetaWindow*
meta_display_get_tab_next (MetaDisplay *display,
MetaTabList type,
@ -4677,6 +4704,18 @@ meta_display_get_tab_next (MetaDisplay *display,
return ret;
}
/**
* meta_display_get_tab_current:
* @display: a #MetaDisplay
* @type: type of tab list
* @screen: a #MetaScreen
* @workspace: origin workspace
*
* Determine the active window that should be displayed for Alt-TAB.
*
* Returns: (transfer none): Current window
*
*/
MetaWindow*
meta_display_get_tab_current (MetaDisplay *display,
MetaTabList type,
@ -5353,18 +5392,32 @@ meta_display_get_compositor_version (MetaDisplay *display,
*minor = display->composite_minor_version;
}
/**
* meta_display_get_xdisplay: (skip)
*
*/
Display *
meta_display_get_xdisplay (MetaDisplay *display)
{
return display->xdisplay;
}
/**
* meta_display_get_compositor: (skip)
*
*/
MetaCompositor *
meta_display_get_compositor (MetaDisplay *display)
{
return display->compositor;
}
/**
* meta_display_get_screens:
* @display: a #MetaDisplay
*
* Returns: (transfer none) (element-type Meta.Screen): Screens for this display
*/
GSList *
meta_display_get_screens (MetaDisplay *display)
{

View File

@ -104,6 +104,10 @@ meta_group_unref (MetaGroup *group)
}
}
/**
* meta_window_get_group: (skip)
*
*/
MetaGroup*
meta_window_get_group (MetaWindow *window)
{
@ -198,6 +202,10 @@ meta_window_shutdown_group (MetaWindow *window)
remove_window_from_group (window);
}
/**
* meta_display_lookup_group: (skip)
*
*/
MetaGroup*
meta_display_lookup_group (MetaDisplay *display,
Window group_leader)
@ -213,6 +221,12 @@ meta_display_lookup_group (MetaDisplay *display,
return group;
}
/**
* meta_group_list_windows:
* @group: A #MetaGroup
*
* Returns: (transfer container) (element-type Meta.Window): List of windows
*/
GSList*
meta_group_list_windows (MetaGroup *group)
{
@ -263,6 +277,10 @@ meta_group_get_startup_id (MetaGroup *group)
return group->startup_id;
}
/**
* meta_group_property_notify: (skip)
*
*/
gboolean
meta_group_property_notify (MetaGroup *group,
XEvent *event)

View File

@ -3547,6 +3547,10 @@ meta_keybindings_set_custom_handler (const gchar *name,
return TRUE;
}
/**
* meta_keybindings_switch_window: (skip)
*
*/
void
meta_keybindings_switch_window (MetaDisplay *display,
MetaScreen *screen,

View File

@ -886,6 +886,10 @@ handle_preference_update_int (const gchar *key, GConfValue *value)
/* Listeners. */
/****************************************************************************/
/**
* meta_prefs_add_listener: (skip)
*
*/
void
meta_prefs_add_listener (MetaPrefsChangedFunc func,
gpointer data)
@ -899,6 +903,10 @@ meta_prefs_add_listener (MetaPrefsChangedFunc func,
listeners = g_list_prepend (listeners, l);
}
/**
* meta_prefs_remove_listener: (skip)
*
*/
void
meta_prefs_remove_listener (MetaPrefsChangedFunc func,
gpointer data)
@ -2998,6 +3006,11 @@ meta_prefs_set_compositing_manager (gboolean whether)
#endif
}
/**
* meta_prefs_get_clutter_plugins:
*
* Returns: (transfer none) (element-type utf8): Plugin names to load
*/
GSList *
meta_prefs_get_clutter_plugins (void)
{

View File

@ -3122,6 +3122,10 @@ meta_screen_get_display (MetaScreen *screen)
return screen->display;
}
/**
* meta_screen_get_xroot: (skip)
*
*/
Window
meta_screen_get_xroot (MetaScreen *screen)
{
@ -3137,6 +3141,10 @@ meta_screen_get_size (MetaScreen *screen,
*height = screen->rect.height;
}
/**
* meta_screen_get_compositor_data: (skip)
*
*/
gpointer
meta_screen_get_compositor_data (MetaScreen *screen)
{
@ -3178,6 +3186,12 @@ meta_screen_unset_cm_selection (MetaScreen *screen)
None, screen->wm_cm_timestamp);
}
/**
* meta_screen_get_workspaces: (skip)
* @screen: a #MetaScreen
*
* Returns: (transfer none) (element-type Meta.Workspace): The workspaces for @screen
*/
GList *
meta_screen_get_workspaces (MetaScreen *screen)
{

View File

@ -4371,10 +4371,17 @@ idle_move_resize (gpointer data)
return FALSE;
}
/* This is used to notify us of an unrequested configuration
* (only applicable to override redirect windows) */
/**
* meta_window_configure_notify: (skip)
* @window: a #MetaWindow
* @event: a #XConfigureEvent
*
* This is used to notify us of an unrequested configuration
* (only applicable to override redirect windows)
*/
void
meta_window_configure_notify (MetaWindow *window, XConfigureEvent *event)
meta_window_configure_notify (MetaWindow *window,
XConfigureEvent *event)
{
g_assert (window->override_redirect);
g_assert (window->frame == NULL);
@ -4927,6 +4934,15 @@ find_root_ancestor (MetaWindow *window,
return TRUE;
}
/**
* meta_window_find_root_ancestor:
* @window: a #MetaWindow
*
* Follow the chain of parents of @window, skipping transient windows,
* and return the "root" window which has no non-transient parent.
*
* Returns: (transfer none): The root ancestor window
*/
MetaWindow *
meta_window_find_root_ancestor (MetaWindow *window)
{
@ -8828,6 +8844,10 @@ meta_window_unset_demands_attention (MetaWindow *window)
}
}
/**
* meta_window_get_frame: (skip)
*
*/
MetaFrame *
meta_window_get_frame (MetaWindow *window)
{
@ -8896,12 +8916,22 @@ meta_window_get_screen (MetaWindow *window)
return window->screen;
}
/**
* meta_window_get_display:
* @window: A #MetaWindow
*
* Returns: (transfer none): The display for @window
*/
MetaDisplay *
meta_window_get_display (MetaWindow *window)
{
return window->display;
}
/**
* meta_window_get_xwindow: (skip)
*
*/
Window
meta_window_get_xwindow (MetaWindow *window)
{

View File

@ -1,21 +0,0 @@
#!/usr/bin/python
import re
import sys
# gobject-introspection currently has a bug where an alias like
# 'typedef GdkRectangle cairo_rect_int_t' is stored un-namespaced,
# so it is taken to apply to all *Rectangle types. Fixing this
# requires a significant rework of g-ir-scanner, so for the moment
# we fix up the output using this script.
#
# https://bugzilla.gnome.org/show_bug.cgi?id=622609
GDK_RECTANGLE = re.compile(r'Gdk\.Rectangle')
META_RECTANGLE = re.compile(r'MetaRectangle')
i = open(sys.argv[1], 'r')
o = open(sys.argv[2], 'w')
for line in i:
if GDK_RECTANGLE.search(line) and META_RECTANGLE.search(line):
line = re.sub('Gdk.Rectangle', 'Rectangle', line)
o.write(line)

View File

@ -23,6 +23,10 @@
#include "display.h"
#include "common.h"
/**
* MetaKeyHandlerFunc: (skip)
*
*/
typedef void (* MetaKeyHandlerFunc) (MetaDisplay *display,
MetaScreen *screen,
MetaWindow *window,

View File

@ -39,7 +39,15 @@
#define MUTTER_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MUTTER_TYPE_PLUGIN))
#define MUTTER_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MUTTER_TYPE_PLUGIN, MutterPluginClass))
/**
* MetaMutterPlugin: (skip)
*
*/
typedef struct _MutterPlugin MutterPlugin;
/**
* MetaMutterPluginClass: (skip)
*
*/
typedef struct _MutterPluginClass MutterPluginClass;
typedef struct _MutterPluginVersion MutterPluginVersion;
typedef struct _MutterPluginInfo MutterPluginInfo;

View File

@ -22,12 +22,20 @@
#ifndef META_TYPES_H
#define META_TYPES_H
/**
* MetaCompositor: (skip)
*
*/
typedef struct _MetaCompositor MetaCompositor;
typedef struct _MetaDisplay MetaDisplay;
typedef struct _MetaFrame MetaFrame;
typedef struct _MetaScreen MetaScreen;
typedef struct _MetaWindow MetaWindow;
typedef struct _MetaWorkspace MetaWorkspace;
/**
* MetaGroup: (skip)
*
*/
typedef struct _MetaGroup MetaGroup;
typedef struct _MetaKeyBinding MetaKeyBinding;

View File

@ -87,6 +87,16 @@ blank_pixbuf (int width, int height, gboolean no_padding)
free_buffer, NULL);
}
/**
* meta_gradient_create_simple:
* @width: Width in pixels
* @height: Height in pixels
* @from: Starting color
* @to: Ending color
* @style: Gradient style
*
* Returns: (transfer full): A new linear gradient
*/
GdkPixbuf*
meta_gradient_create_simple (int width,
int height,
@ -113,6 +123,16 @@ meta_gradient_create_simple (int width,
return NULL;
}
/**
* meta_gradient_create_multi:
* @width: Width in pixels
* @height: Height in pixels
* @colors: (array length=n_colors): Array of colors
* @n_colors: Number of colors
* @style: Gradient style
*
* Returns: (transfer full): A new multi-step linear gradient
*/
GdkPixbuf*
meta_gradient_create_multi (int width,
int height,
@ -150,7 +170,10 @@ meta_gradient_create_multi (int width,
return NULL;
}
/* Interwoven essentially means we have two vertical gradients,
/**
* meta_gradient_create_interwoven: (skip)
*
* Interwoven essentially means we have two vertical gradients,
* cut into horizontal strips of the given thickness, and then the strips
* are alternated. I'm not sure what it's good for, just copied since
* WindowMaker had it.

View File

@ -4204,6 +4204,10 @@ keep_trying (GError **error)
return FALSE;
}
/**
* meta_theme_load: (skip)
*
*/
MetaTheme*
meta_theme_load (const char *theme_name,
GError **err)

View File

@ -204,10 +204,12 @@ init_border (GtkBorder *border)
}
/**
* meta_frame_layout_new: (skip)
*
* Creates a new, empty MetaFrameLayout. The fields will be set to dummy
* values.
*
* \return The newly created MetaFrameLayout.
* Returns: The newly created MetaFrameLayout.
*/
MetaFrameLayout*
meta_frame_layout_new (void)
@ -940,6 +942,10 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
fgeom->bottom_right_corner_rounded_radius = layout->bottom_right_corner_rounded_radius;
}
/**
* meta_gradient_spec_new: (skip)
*
*/
MetaGradientSpec*
meta_gradient_spec_new (MetaGradientType type)
{
@ -1026,6 +1032,10 @@ meta_gradient_spec_validate (MetaGradientSpec *spec,
return TRUE;
}
/**
* meta_alpha_gradient_spec_new: (skip)
*
*/
MetaAlphaGradientSpec*
meta_alpha_gradient_spec_new (MetaGradientType type,
int n_alphas)
@ -1052,6 +1062,10 @@ meta_alpha_gradient_spec_free (MetaAlphaGradientSpec *spec)
g_free (spec);
}
/**
* meta_color_spec_new: (skip)
*
*/
MetaColorSpec*
meta_color_spec_new (MetaColorSpecType type)
{
@ -1120,6 +1134,10 @@ meta_color_spec_free (MetaColorSpec *spec)
g_free (spec);
}
/**
* meta_color_spec_new_from_string: (skip)
*
*/
MetaColorSpec*
meta_color_spec_new_from_string (const char *str,
GError **err)
@ -1343,6 +1361,10 @@ meta_color_spec_new_from_string (const char *str,
return spec;
}
/**
* meta_color_spec_new_gtk: (skip)
*
*/
MetaColorSpec*
meta_color_spec_new_gtk (MetaGtkColorComponent component,
GtkStateType state)
@ -2483,6 +2505,10 @@ pos_eval (MetaDrawSpec *spec,
* most contexts.
*/
/**
* meta_parse_position_expression: (skip)
*
*/
gboolean
meta_parse_position_expression (MetaDrawSpec *spec,
const MetaPositionExprEnv *env,
@ -2520,6 +2546,10 @@ meta_parse_position_expression (MetaDrawSpec *spec,
}
/**
* meta_parse_size_expression: (skip)
*
*/
gboolean
meta_parse_size_expression (MetaDrawSpec *spec,
const MetaPositionExprEnv *env,
@ -2664,6 +2694,10 @@ meta_draw_spec_free (MetaDrawSpec *spec)
g_slice_free (MetaDrawSpec, spec);
}
/**
* meta_draw_spec_new: (skip)
*
*/
MetaDrawSpec *
meta_draw_spec_new (MetaTheme *theme,
const char *expr,
@ -2692,6 +2726,10 @@ meta_draw_spec_new (MetaTheme *theme,
return spec;
}
/**
* meta_draw_op_new: (skip)
*
*/
MetaDrawOp*
meta_draw_op_new (MetaDrawType type)
{
@ -3911,6 +3949,10 @@ meta_draw_op_draw (const MetaDrawOp *op,
drawable, clip, info, logical_region);
}
/**
* meta_draw_op_list_new: (skip)
*
*/
MetaDrawOpList*
meta_draw_op_list_new (int n_preallocs)
{
@ -4804,6 +4846,10 @@ meta_frame_style_set_validate (MetaFrameStyleSet *style_set,
return TRUE;
}
/**
* meta_theme_get_current: (skip)
*
*/
MetaTheme*
meta_theme_get_current (void)
{
@ -4844,6 +4890,10 @@ meta_theme_set_current (const char *name,
}
}
/**
* meta_theme_new: (skip)
*
*/
MetaTheme*
meta_theme_new (void)
{
@ -5008,6 +5058,10 @@ meta_theme_validate (MetaTheme *theme,
return TRUE;
}
/**
* meta_theme_load_image: (skip)
*
*/
GdkPixbuf*
meta_theme_load_image (MetaTheme *theme,
const char *filename,

View File

@ -29,18 +29,70 @@
#include "common.h"
#include <gtk/gtk.h>
/**
* MetaFrameStyle: (skip)
*
*/
typedef struct _MetaFrameStyle MetaFrameStyle;
/**
* MetaFrameStyleSet: (skip)
*
*/
typedef struct _MetaFrameStyleSet MetaFrameStyleSet;
/**
* MetaDrawOp: (skip)
*
*/
typedef struct _MetaDrawOp MetaDrawOp;
/**
* MetaDrawOpList: (skip)
*
*/
typedef struct _MetaDrawOpList MetaDrawOpList;
/**
* MetaGradientSpec: (skip)
*
*/
typedef struct _MetaGradientSpec MetaGradientSpec;
/**
* MetaAlphaGradientSpec: (skip)
*
*/
typedef struct _MetaAlphaGradientSpec MetaAlphaGradientSpec;
/**
* MetaColorSpec: (skip)
*
*/
typedef struct _MetaColorSpec MetaColorSpec;
/**
* MetaFrameLayout: (skip)
*
*/
typedef struct _MetaFrameLayout MetaFrameLayout;
/**
* MetaButtonSpace: (skip)
*
*/
typedef struct _MetaButtonSpace MetaButtonSpace;
/**
* MetaFrameGeometry: (skip)
*
*/
typedef struct _MetaFrameGeometry MetaFrameGeometry;
/**
* MetaTheme: (skip)
*
*/
typedef struct _MetaTheme MetaTheme;
/**
* MetaPositionExprEnv: (skip)
*
*/
typedef struct _MetaPositionExprEnv MetaPositionExprEnv;
/**
* MetaDrawInfo: (skip)
*
*/
typedef struct _MetaDrawInfo MetaDrawInfo;
#define META_THEME_ERROR (g_quark_from_static_string ("meta-theme-error"))
@ -384,6 +436,8 @@ typedef struct
} PosToken;
/**
* MetaDrawSpec: (skip)
*
* A computed expression in our simple vector drawing language.
* While it appears to take the form of a tree, this is actually
* merely a list; concerns such as precedence of operators are
@ -393,7 +447,8 @@ typedef struct
* pos_eval() fills this with ...FIXME. Are tokens a tree or a list?
* \ingroup parser
*/
typedef struct _MetaDrawSpec
typedef struct _MetaDrawSpec MetaDrawSpec;
struct _MetaDrawSpec
{
/**
* If this spec is constant, this is the value of the constant;
@ -409,7 +464,7 @@ typedef struct _MetaDrawSpec
/** Does the expression contain any variables? */
gboolean constant : 1;
} MetaDrawSpec;
};
/**
* A single drawing operation in our simple vector drawing language.