diff -r cb7fbf08fcb7 -r 8ba616e7c69c finch/gntdebug.c --- a/finch/gntdebug.c Wed Jul 12 05:49:25 2017 -0400 +++ b/finch/gntdebug.c Thu Jul 13 01:37:53 2017 -0400 @@ -41,6 +41,20 @@ #define PREF_ROOT "/finch/debug" +struct _FinchDebugUi +{ + GObject parent; + + /* Other members, including private data. */ +}; + +static void finch_debug_ui_finalize(GObject *gobject); +static void finch_debug_ui_interface_init(PurpleDebugUiInterface *iface); + +G_DEFINE_TYPE_WITH_CODE(FinchDebugUi, finch_debug_ui, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE(PURPLE_TYPE_DEBUG_UI, + finch_debug_ui_interface_init)); + static gboolean handle_fprintf_stderr_cb(GIOChannel *source, GIOCondition cond, gpointer null) { @@ -108,8 +122,9 @@ } static void -finch_debug_print(PurpleDebugLevel level, const char *category, - const char *args) +finch_debug_print(PurpleDebugUi *self, + PurpleDebugLevel level, const char *category, + const char *args) { if (debug.window && !debug.paused && match_string(category, args)) { @@ -147,26 +162,16 @@ } static gboolean -finch_debug_is_enabled(PurpleDebugLevel level, const char *category) +finch_debug_is_enabled(PurpleDebugUi *self, PurpleDebugLevel level, const char *category) { return debug.window && !debug.paused; } -static PurpleDebugUiOps uiops = +static void +finch_debug_ui_interface_init(PurpleDebugUiInterface *iface) { - finch_debug_print, - finch_debug_is_enabled, - - /* padding */ - NULL, - NULL, - NULL, - NULL -}; - -PurpleDebugUiOps *finch_debug_get_ui_ops() -{ - return &uiops; + iface->print = finch_debug_print; + iface->is_enabled = finch_debug_is_enabled; } static void @@ -371,7 +376,16 @@ return FALSE; } -void finch_debug_init() +static void +finch_debug_ui_class_init(FinchDebugUiClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS(klass); + + object_class->finalize = finch_debug_ui_finalize; +} + +static void +finch_debug_ui_init(FinchDebugUi *self) { /* Xerox */ #define REGISTER_G_LOG_HANDLER(name) \ @@ -405,8 +419,15 @@ g_timeout_add(0, start_with_debugwin, NULL); } -void finch_debug_uninit() +static void +finch_debug_ui_finalize(GObject *gobject) { handle_fprintf_stderr(TRUE); + G_OBJECT_CLASS(finch_debug_ui_parent_class)->finalize(gobject); } +FinchDebugUi * +finch_debug_ui_new(void) +{ + return g_object_new(FINCH_TYPE_DEBUG_UI, NULL); +}