diff --git a/include/dbus-c++/glib-integration.h b/include/dbus-c++/glib-integration.h index a60e3f8..e76dfbd 100644 --- a/include/dbus-c++/glib-integration.h +++ b/include/dbus-c++/glib-integration.h @@ -44,7 +44,7 @@ class DXXAPI BusTimeout : public Timeout { private: - BusTimeout( Timeout::Internal*, GMainContext* ); + BusTimeout( Timeout::Internal*, GMainContext*, int ); ~BusTimeout(); @@ -60,6 +60,7 @@ private: GSource* _source; GMainContext* _ctx; + int _priority; friend class BusDispatcher; }; @@ -68,7 +69,7 @@ class DXXAPI BusWatch : public Watch { private: - BusWatch( Watch::Internal*, GMainContext* ); + BusWatch( Watch::Internal*, GMainContext*, int ); ~BusWatch(); @@ -84,6 +85,7 @@ private: GSource* _source; GMainContext* _ctx; + int _priority; friend class BusDispatcher; }; @@ -91,7 +93,8 @@ friend class BusDispatcher; class DXXAPI BusDispatcher : public Dispatcher { public: - BusDispatcher() : _ctx(NULL) {} + + BusDispatcher() : _ctx(NULL), _priority(G_PRIORITY_DEFAULT) {} void attach( GMainContext* ); @@ -107,9 +110,12 @@ public: void rem_watch( Watch* ); + void set_priority( int priority ); + private: GMainContext* _ctx; + int _priority; }; } /* namespace Glib */ diff --git a/src/glib-integration.cpp b/src/glib-integration.cpp index 42c31ea..5583995 100644 --- a/src/glib-integration.cpp +++ b/src/glib-integration.cpp @@ -28,8 +28,8 @@ using namespace DBus; -Glib::BusTimeout::BusTimeout( Timeout::Internal* ti, GMainContext* ctx ) -: Timeout(ti), _ctx(ctx) +Glib::BusTimeout::BusTimeout( Timeout::Internal* ti, GMainContext* ctx, int priority ) +: Timeout(ti), _ctx(ctx), _priority(priority) { _enable(); } @@ -59,6 +59,7 @@ gboolean Glib::BusTimeout::timeout_handler( gpointer data ) void Glib::BusTimeout::_enable() { _source = g_timeout_source_new(Timeout::interval()); + g_source_set_priority(_source, _priority); g_source_set_callback(_source, timeout_handler, this, NULL); g_source_attach(_source, _ctx); } @@ -106,8 +107,8 @@ static GSourceFuncs watch_funcs = { NULL }; -Glib::BusWatch::BusWatch( Watch::Internal* wi, GMainContext* ctx ) -: Watch(wi), _ctx(ctx) +Glib::BusWatch::BusWatch( Watch::Internal* wi, GMainContext* ctx, int priority ) +: Watch(wi), _ctx(ctx), _priority(priority) { _enable(); } @@ -149,6 +150,7 @@ gboolean Glib::BusWatch::watch_handler( gpointer data ) void Glib::BusWatch::_enable() { _source = g_source_new(&watch_funcs, sizeof(BusSource)); + g_source_set_priority(_source, _priority); g_source_set_callback(_source, watch_handler, this, NULL); int flags = Watch::flags(); @@ -186,7 +188,7 @@ void Glib::BusDispatcher::attach( GMainContext* ctx ) Timeout* Glib::BusDispatcher::add_timeout( Timeout::Internal* wi ) { - Timeout* t = new Glib::BusTimeout(wi, _ctx); + Timeout* t = new Glib::BusTimeout(wi, _ctx, _priority); debug_log("glib: added timeout %p (%s)", t, t->enabled() ? "on":"off"); @@ -202,7 +204,7 @@ void Glib::BusDispatcher::rem_timeout( Timeout* t ) Watch* Glib::BusDispatcher::add_watch( Watch::Internal* wi ) { - Watch* w = new Glib::BusWatch(wi, _ctx); + Watch* w = new Glib::BusWatch(wi, _ctx, _priority); debug_log("glib: added watch %p (%s) fd=%d flags=%d", w, w->enabled() ? "on":"off", w->descriptor(), w->flags() @@ -216,3 +218,8 @@ void Glib::BusDispatcher::rem_watch( Watch* w ) delete w; } + +void Glib::BusDispatcher::set_priority(int priority) +{ + _priority = priority; +}