diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h index 2916e5e4e..daf8c31bb 100644 --- a/src/compositor/compositor-private.h +++ b/src/compositor/compositor-private.h @@ -72,8 +72,6 @@ ClutterStage * meta_compositor_get_stage (MetaCompositor *compositor); gboolean meta_compositor_is_switching_workspace (MetaCompositor *compositor); -MetaLaters * meta_compositor_get_laters (MetaCompositor *compositor); - void meta_compositor_grab_begin (MetaCompositor *compositor); void meta_compositor_grab_end (MetaCompositor *compositor); diff --git a/src/compositor/meta-later-private.h b/src/compositor/meta-later-private.h index c8d0f80a8..ea9359d15 100644 --- a/src/compositor/meta-later-private.h +++ b/src/compositor/meta-later-private.h @@ -18,8 +18,7 @@ #ifndef META_LATER_PRIVATE_H #define META_LATER_PRIVATE_H -typedef struct _MetaLaters MetaLaters; -typedef struct _MetaCompositor MetaCompositor; +#include MetaLaters * meta_laters_new (MetaCompositor *compositor); diff --git a/src/compositor/meta-later.c b/src/compositor/meta-later.c index 43da6d8e6..6c564d6ef 100644 --- a/src/compositor/meta-later.c +++ b/src/compositor/meta-later.c @@ -208,7 +208,25 @@ invoke_later_idle (gpointer data) } } -static unsigned int +/** + * meta_laters_add: + * @laters: a #MetaLaters + * @when: enumeration value determining the phase at which to run the callback + * @func: callback to run later + * @user_data: data to pass to the callback + * @notify: function to call to destroy @data when it is no longer in use, or %NULL + * + * Sets up a callback to be called at some later time. @when determines the + * particular later occasion at which it is called. This is much like g_idle_add(), + * except that the functions interact properly with clutter event handling. + * If a "later" function is added from a clutter event handler, and is supposed + * to be run before the stage is redrawn, it will be run before that redraw + * of the stage, not the next one. + * + * Return value: an integer ID (guaranteed to be non-zero) that can be used + * to cancel the callback and prevent it from being run. + */ +unsigned int meta_laters_add (MetaLaters *laters, MetaLaterType when, GSourceFunc func, @@ -287,7 +305,14 @@ meta_later_add (MetaLaterType when, when, func, data, notify); } -static void +/** + * meta_laters_remove: + * @laters: a #MetaLaters + * @later_id: the integer ID returned from meta_later_add() + * + * Removes a callback added with meta_later_add() + */ +void meta_laters_remove (MetaLaters *laters, unsigned int later_id) { diff --git a/src/meta/compositor.h b/src/meta/compositor.h index 1ccae70d7..e33abad99 100644 --- a/src/meta/compositor.h +++ b/src/meta/compositor.h @@ -162,4 +162,7 @@ void meta_compositor_show_window_menu_for_rect (MetaCompositor *compositor, MetaWindowMenuType menu, MetaRectangle *rect); +META_EXPORT +MetaLaters * meta_compositor_get_laters (MetaCompositor *compositor); + #endif /* META_COMPOSITOR_H */ diff --git a/src/meta/meta-later.h b/src/meta/meta-later.h index 4464fc3bd..1626024d3 100644 --- a/src/meta/meta-later.h +++ b/src/meta/meta-later.h @@ -20,6 +20,8 @@ #ifndef META_LATER_H #define META_LATER_H +#include + /** * MetaLaterType: * @META_LATER_RESIZE: call in a resize processing phase that is done @@ -50,4 +52,15 @@ guint meta_later_add (MetaLaterType when, META_EXPORT void meta_later_remove (guint later_id); +META_EXPORT +unsigned int meta_laters_add (MetaLaters *laters, + MetaLaterType when, + GSourceFunc func, + gpointer user_data, + GDestroyNotify notify); + +META_EXPORT +void meta_laters_remove (MetaLaters *laters, + unsigned int later_id); + #endif /* META_LATER_H */ diff --git a/src/meta/types.h b/src/meta/types.h index 403e62b16..ba6fa02be 100644 --- a/src/meta/types.h +++ b/src/meta/types.h @@ -32,6 +32,7 @@ typedef struct _MetaX11Display MetaX11Display; typedef struct _MetaFrame MetaFrame; typedef struct _MetaWindow MetaWindow; typedef struct _MetaWorkspace MetaWorkspace; +typedef struct _MetaLaters MetaLaters; /** * MetaGroup: (skip) *