pidgin/gtkdebug.c

changeset 38645
bf3f91939dc5
parent 38433
361c801c4536
child 38686
0c8abea27d96
child 38705
62a7a975251a
--- a/pidgin/gtkdebug.c	Thu Jul 13 01:37:53 2017 -0400
+++ b/pidgin/gtkdebug.c	Thu Jul 13 03:22:56 2017 -0400
@@ -59,7 +59,21 @@
 } DebugWindow;
 
 static DebugWindow *debug_win = NULL;
-static guint debug_enabled_timer = 0;
+
+struct _PidginDebugUi
+{
+	GObject parent;
+
+	/* Other members, including private data. */
+	guint debug_enabled_timer;
+};
+
+static void pidgin_debug_ui_finalize(GObject *gobject);
+static void pidgin_debug_ui_interface_init(PurpleDebugUiInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE(PidginDebugUi, pidgin_debug_ui, G_TYPE_OBJECT,
+                        G_IMPLEMENT_INTERFACE(PURPLE_TYPE_DEBUG_UI,
+                                              pidgin_debug_ui_interface_init));
 
 static gint
 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused)
@@ -621,12 +635,23 @@
 static gboolean
 debug_enabled_timeout_cb(gpointer data)
 {
-	debug_enabled_timer = 0;
+	PidginDebugUi *ui = PIDGIN_DEBUG_UI(data);
+
+	ui->debug_enabled_timer = 0;
+
+	pidgin_debug_window_show();
+
+	return FALSE;
+}
 
-	if (data)
-		pidgin_debug_window_show();
-	else
-		pidgin_debug_window_hide();
+static gboolean
+debug_disabled_timeout_cb(gpointer data)
+{
+	PidginDebugUi *ui = PIDGIN_DEBUG_UI(data);
+
+	ui->debug_enabled_timer = 0;
+
+	pidgin_debug_window_hide();
 
 	return FALSE;
 }
@@ -635,7 +660,12 @@
 debug_enabled_cb(const char *name, PurplePrefType type,
 				 gconstpointer value, gpointer data)
 {
-	debug_enabled_timer = g_timeout_add(0, debug_enabled_timeout_cb, GINT_TO_POINTER(GPOINTER_TO_INT(value)));
+	PidginDebugUi *ui = PIDGIN_DEBUG_UI(data);
+
+	if (GPOINTER_TO_INT(value))
+		ui->debug_enabled_timer = g_timeout_add(0, debug_enabled_timeout_cb, data);
+	else
+		ui->debug_enabled_timer = g_timeout_add(0, debug_disabled_timeout_cb, data);
 }
 
 static void
@@ -701,8 +731,8 @@
 }
 #endif
 
-void
-pidgin_debug_init(void)
+static void
+pidgin_debug_ui_init(PidginDebugUi *self)
 {
 	/* Debug window preferences. */
 	/*
@@ -730,7 +760,7 @@
 	purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/debug/highlight", FALSE);
 
 	purple_prefs_connect_callback(NULL, PIDGIN_PREFS_ROOT "/debug/enabled",
-								debug_enabled_cb, NULL);
+	                              debug_enabled_cb, self);
 
 #define REGISTER_G_LOG_HANDLER(name) \
 	g_log_set_handler((name), G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL \
@@ -757,13 +787,16 @@
 #endif
 }
 
-void
-pidgin_debug_uninit(void)
+static void
+pidgin_debug_ui_finalize(GObject *gobject)
 {
-	purple_debug_set_ui_ops(NULL);
+	PidginDebugUi *self = PIDGIN_DEBUG_UI(gobject);
 
-	if (debug_enabled_timer != 0)
-		g_source_remove(debug_enabled_timer);
+	if (self->debug_enabled_timer != 0)
+		g_source_remove(self->debug_enabled_timer);
+	self->debug_enabled_timer = 0;
+
+	G_OBJECT_CLASS(pidgin_debug_ui_parent_class)->finalize(gobject);
 }
 
 void
@@ -787,8 +820,9 @@
 }
 
 static void
-pidgin_debug_print(PurpleDebugLevel level, const char *category,
-	const char *arg_s)
+pidgin_debug_print(PurpleDebugUi *self,
+                   PurpleDebugLevel level, const char *category,
+                   const char *arg_s)
 {
 	gchar *esc_s;
 	const char *mdate;
@@ -814,26 +848,31 @@
 }
 
 static gboolean
-pidgin_debug_is_enabled(PurpleDebugLevel level, const char *category)
+pidgin_debug_is_enabled(PurpleDebugUi *self, PurpleDebugLevel level, const char *category)
 {
 	return (debug_win != NULL &&
 			purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled"));
 }
 
-static PurpleDebugUiOps ops =
+static void
+pidgin_debug_ui_interface_init(PurpleDebugUiInterface *iface)
+{
+	iface->print = pidgin_debug_print;
+	iface->is_enabled = pidgin_debug_is_enabled;
+}
+
+static void
+pidgin_debug_ui_class_init(PidginDebugUiClass *klass)
 {
-	pidgin_debug_print,
-	pidgin_debug_is_enabled,
-	NULL,
-	NULL,
-	NULL,
-	NULL
-};
+	GObjectClass *object_class = G_OBJECT_CLASS(klass);
+
+	object_class->finalize = pidgin_debug_ui_finalize;
+}
 
-PurpleDebugUiOps *
-pidgin_debug_get_ui_ops(void)
+PidginDebugUi *
+pidgin_debug_ui_new(void)
 {
-	return &ops;
+	return g_object_new(PIDGIN_TYPE_DEBUG_UI, NULL);
 }
 
 void *

mercurial