Guarded GTK2-only GtkObject includes in the xtext header for GTK2 builds only.

Added a shared cleanup helper plus GTK2 destroy/GTK3 dispose handlers with correct parent chaining for cleanup parity across GTK versions.
Updated class initialization to register GTK3 dispose or GTK2 destroy handlers with appropriate object class setup.
This commit is contained in:
2026-01-29 22:44:54 -07:00
parent aa0b271aa9
commit bf529ba1ff
2 changed files with 40 additions and 4 deletions

View File

@@ -689,10 +689,8 @@ gtk_xtext_new (const XTextColor *palette, int separator)
} }
static void static void
gtk_xtext_destroy (GtkObject * object) gtk_xtext_cleanup (GtkXText *xtext)
{ {
GtkXText *xtext = GTK_XTEXT (object);
if (xtext->add_io_tag) if (xtext->add_io_tag)
{ {
g_source_remove (xtext->add_io_tag); g_source_remove (xtext->add_io_tag);
@@ -750,10 +748,33 @@ gtk_xtext_destroy (GtkObject * object)
gtk_xtext_buffer_free (xtext->orig_buffer); gtk_xtext_buffer_free (xtext->orig_buffer);
xtext->orig_buffer = NULL; xtext->orig_buffer = NULL;
} }
}
#if !HAVE_GTK3
static void
gtk_xtext_destroy (GtkObject * object)
{
GtkXText *xtext = GTK_XTEXT (object);
gtk_xtext_cleanup (xtext);
if (GTK_OBJECT_CLASS (parent_class)->destroy) if (GTK_OBJECT_CLASS (parent_class)->destroy)
(*GTK_OBJECT_CLASS (parent_class)->destroy) (object); (*GTK_OBJECT_CLASS (parent_class)->destroy) (object);
} }
#endif
#if HAVE_GTK3
static void
gtk_xtext_dispose (GObject *object)
{
GtkXText *xtext = GTK_XTEXT (object);
gtk_xtext_cleanup (xtext);
if (G_OBJECT_CLASS (parent_class)->dispose)
(*G_OBJECT_CLASS (parent_class)->dispose) (object);
}
#endif
static void static void
gtk_xtext_unrealize (GtkWidget * widget) gtk_xtext_unrealize (GtkWidget * widget)
@@ -2586,11 +2607,19 @@ gtk_xtext_scroll_adjustments (GtkXText *xtext, GtkAdjustment *hadj, GtkAdjustmen
static void static void
gtk_xtext_class_init (GtkXTextClass * class) gtk_xtext_class_init (GtkXTextClass * class)
{ {
GtkObjectClass *object_class;
GtkWidgetClass *widget_class; GtkWidgetClass *widget_class;
GtkXTextClass *xtext_class; GtkXTextClass *xtext_class;
#if HAVE_GTK3
GObjectClass *object_class;
#else
GtkObjectClass *object_class;
#endif
#if HAVE_GTK3
object_class = G_OBJECT_CLASS (class);
#else
object_class = (GtkObjectClass *) class; object_class = (GtkObjectClass *) class;
#endif
widget_class = (GtkWidgetClass *) class; widget_class = (GtkWidgetClass *) class;
xtext_class = (GtkXTextClass *) class; xtext_class = (GtkXTextClass *) class;
@@ -2615,7 +2644,11 @@ gtk_xtext_class_init (GtkXTextClass * class)
G_TYPE_NONE, G_TYPE_NONE,
2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
#if HAVE_GTK3
object_class->dispose = gtk_xtext_dispose;
#else
object_class->destroy = gtk_xtext_destroy; object_class->destroy = gtk_xtext_destroy;
#endif
widget_class->realize = gtk_xtext_realize; widget_class->realize = gtk_xtext_realize;
widget_class->unrealize = gtk_xtext_unrealize; widget_class->unrealize = gtk_xtext_unrealize;

View File

@@ -21,6 +21,9 @@
#define ZOITECHAT_XTEXT_H #define ZOITECHAT_XTEXT_H
#include <gtk/gtk.h> #include <gtk/gtk.h>
#if !HAVE_GTK3
#include <gtk/gtkobject.h>
#endif
#include <cairo.h> #include <cairo.h>
#include "xtext-color.h" #include "xtext-color.h"