diff options
| -rw-r--r-- | gtk/PlatGTK.cxx | 34 | ||||
| -rw-r--r-- | gtk/ScintillaGTK.cxx | 231 | ||||
| -rw-r--r-- | include/ScintillaWidget.h | 4 | 
3 files changed, 206 insertions, 63 deletions
| diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index 9abeb5454..599d92954 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -1016,6 +1016,8 @@ void SurfaceImpl::RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAl  	}  } +#if GTK_MAJOR_VERSION >= 2 +  // Plot a point into a guint32 buffer symetrically to all 4 qudrants  static void AllFour(guint32 *pixels, int stride, int width, int height, int x, int y, guint32 val) {  	pixels[y*stride+x] = val; @@ -1036,6 +1038,8 @@ static unsigned int GetBValue(unsigned int co) {  	return co & 0xff;  } +#endif +  #if GTK_MAJOR_VERSION < 2  void SurfaceImpl::AlphaRectangle(PRectangle rc, int , ColourAllocated , int , ColourAllocated outline, int , int ) {  	if (gc && drawable) { @@ -2011,17 +2015,18 @@ void ListBoxX::Create(Window &, int, Point, int, bool) {  #if GTK_MAJOR_VERSION < 2  	list = gtk_clist_new(1); -	gtk_widget_show(PWidget(list)); -	gtk_container_add(GTK_CONTAINER(PWidget(scroller)), PWidget(list)); -	gtk_clist_set_column_auto_resize(GTK_CLIST(PWidget(list)), 0, TRUE); -	gtk_clist_set_selection_mode(GTK_CLIST(PWidget(list)), GTK_SELECTION_BROWSE); -	gtk_signal_connect(GTK_OBJECT(PWidget(list)), "unselect_row", +	GtkWidget *wid = PWidget(list);	// No code inside the GTK_OBJECT macro +	gtk_widget_show(wid); +	gtk_container_add(GTK_CONTAINER(PWidget(scroller)), wid); +	gtk_clist_set_column_auto_resize(GTK_CLIST(wid), 0, TRUE); +	gtk_clist_set_selection_mode(GTK_CLIST(wid), GTK_SELECTION_BROWSE); +	gtk_signal_connect(GTK_OBJECT(wid), "unselect_row",  	                   GTK_SIGNAL_FUNC(UnselectionAC), ¤t); -	gtk_signal_connect(GTK_OBJECT(PWidget(list)), "select_row", +	gtk_signal_connect(GTK_OBJECT(wid), "select_row",  	                   GTK_SIGNAL_FUNC(SelectionAC), ¤t); -	gtk_signal_connect(GTK_OBJECT(PWidget(list)), "button_press_event", +	gtk_signal_connect(GTK_OBJECT(wid), "button_press_event",  	                   GTK_SIGNAL_FUNC(ButtonPress), this); -	gtk_clist_set_shadow_type(GTK_CLIST(PWidget(list)), GTK_SHADOW_NONE); +	gtk_clist_set_shadow_type(GTK_CLIST(wid), GTK_SHADOW_NONE);  #else  	/* Tree and its model */  	GtkListStore *store = @@ -2055,11 +2060,12 @@ void ListBoxX::Create(Window &, int, Point, int, bool) {  	gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);  	if (g_object_class_find_property(G_OBJECT_GET_CLASS(list), "fixed-height-mode"))  		g_object_set(G_OBJECT(list), "fixed-height-mode", TRUE, NULL); -	gtk_container_add(GTK_CONTAINER(PWidget(scroller)), PWidget(list)); -	gtk_widget_show(PWidget(list)); -	gtk_signal_connect(GTK_OBJECT(PWidget(list)), "button_press_event", -	                   GTK_SIGNAL_FUNC(ButtonPress), this); +	GtkWidget *wid = PWidget(list);	// No code inside the G_OBJECT macro +	gtk_container_add(GTK_CONTAINER(PWidget(scroller)), wid); +	gtk_widget_show(wid); +	g_signal_connect(G_OBJECT(wid), "button_press_event", +	                   G_CALLBACK(ButtonPress), this);  #endif  	gtk_widget_realize(PWidget(id));  } @@ -2479,7 +2485,11 @@ void Menu::CreatePopUp() {  void Menu::Destroy() {  	if (id) +#if GTK_MAJOR_VERSION < 2  		gtk_object_unref(GTK_OBJECT(id)); +#else +		g_object_unref(G_OBJECT(id)); +#endif  	id = 0;  } diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 5319ffa2d..2afe3f43e 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -46,7 +46,7 @@  #include "gtk/gtksignal.h"  #include "gtk/gtkmarshal.h" -#if GTK_MAJOR_VERSION >= 2 +#if GLIB_MAJOR_VERSION >= 2  #include "scintilla-marshal.h"  #endif @@ -73,10 +73,16 @@  #pragma warning(disable: 4505)  #endif -#if GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 2 +#if GTK_CHECK_VERSION(2,2,0)  #define USE_GTK_CLIPBOARD  #endif +#if GLIB_MAJOR_VERSION < 2 +#define OBJECT_CLASS GtkObjectClass +#else +#define OBJECT_CLASS GObjectClass +#endif +  extern char *UTF8FromLatin1(const char *s, int &len);  class ScintillaGTK : public ScintillaBase { @@ -140,8 +146,7 @@ class ScintillaGTK : public ScintillaBase {  public:  	ScintillaGTK(_ScintillaObject *sci_);  	virtual ~ScintillaGTK(); -	static void ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class); - +	static void ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class);  private:  	virtual void Initialise();  	virtual void Finalise(); @@ -222,12 +227,12 @@ private:  	static gint ScrollEvent(GtkWidget *widget, GdkEventScroll *event);  #endif  	static gint Motion(GtkWidget *widget, GdkEventMotion *event); -	gint KeyThis(GdkEventKey *event); -	static gint KeyPress(GtkWidget *widget, GdkEventKey *event); -	static gint KeyRelease(GtkWidget *widget, GdkEventKey *event); +	gboolean KeyThis(GdkEventKey *event); +	static gboolean KeyPress(GtkWidget *widget, GdkEventKey *event); +	static gboolean KeyRelease(GtkWidget *widget, GdkEventKey *event);  #if GTK_MAJOR_VERSION >= 2 -	static gint ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis); -	gint ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose); +	static gboolean ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis); +	gboolean ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose);  	static void Commit(GtkIMContext *context, char *str, ScintillaGTK *sciThis);  	void CommitThis(char *str);  	static void PreeditChanged(GtkIMContext *context, ScintillaGTK *sciThis); @@ -235,7 +240,11 @@ private:  #endif  	static gint StyleSetText(GtkWidget *widget, GtkStyle *previous, void*);  	static gint RealizeText(GtkWidget *widget, void*); +#if GLIB_MAJOR_VERSION < 2  	static void Destroy(GtkObject *object); +#else +	static void Destroy(GObject *object); +#endif  	static void SelectionReceived(GtkWidget *widget, GtkSelectionData *selection_data,  	                              guint time);  	static void SelectionGet(GtkWidget *widget, GtkSelectionData *selection_data, @@ -277,7 +286,9 @@ enum {  };  static gint scintilla_signals[LAST_SIGNAL] = { 0 }; -static GtkWidgetClass* parent_class = NULL; +#if GLIB_MAJOR_VERSION < 2 +static GtkWidgetClass *parent_class = NULL; +#endif  enum {      TARGET_STRING, @@ -434,26 +445,35 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) {  #else  	wPreedit = gtk_window_new(GTK_WINDOW_POPUP);  	wPreeditDraw = gtk_drawing_area_new(); -	gtk_signal_connect(GTK_OBJECT(PWidget(wPreeditDraw)), "expose_event", -			   GtkSignalFunc(ExposePreedit), this); -	gtk_container_add(GTK_CONTAINER(PWidget(wPreedit)), PWidget(wPreeditDraw)); +	GtkWidget *predrw = PWidget(wPreeditDraw);	// No code inside the G_OBJECT macro +	g_signal_connect(G_OBJECT(predrw), "expose_event", +			   G_CALLBACK(ExposePreedit), this); +	gtk_container_add(GTK_CONTAINER(PWidget(wPreedit)), predrw);  	gtk_widget_realize(PWidget(wPreedit)); -	gtk_widget_realize(PWidget(wPreeditDraw)); -	gtk_widget_show(PWidget(wPreeditDraw)); +	gtk_widget_realize(predrw); +	gtk_widget_show(predrw);  	im_context = gtk_im_multicontext_new(); -	g_signal_connect(im_context, "commit", +	g_signal_connect(G_OBJECT(im_context), "commit",  			 G_CALLBACK(Commit), this); -	g_signal_connect(im_context, "preedit_changed", +	g_signal_connect(G_OBJECT(im_context), "preedit_changed",  			 G_CALLBACK(PreeditChanged), this);  	gtk_im_context_set_client_window(im_context, widget->window);  #endif  #endif -	gtk_signal_connect_after(GTK_OBJECT(PWidget(wText)), "style_set", +	GtkWidget *widtxt = PWidget(wText);	//	// No code inside the G_OBJECT macro +#if GLIB_MAJOR_VERSION < 2 +	gtk_signal_connect_after(GTK_OBJECT(widtxt), "style_set",  				 GtkSignalFunc(ScintillaGTK::StyleSetText), NULL); -	gtk_signal_connect_after(GTK_OBJECT(PWidget(wText)), "realize", +	gtk_signal_connect_after(GTK_OBJECT(widtxt), "realize",  				 GtkSignalFunc(ScintillaGTK::RealizeText), NULL); -	gtk_widget_realize(PWidget(wText)); +#else +	g_signal_connect_after(G_OBJECT(widtxt), "style_set", +				 G_CALLBACK(ScintillaGTK::StyleSetText), NULL); +	g_signal_connect_after(G_OBJECT(widtxt), "realize", +				 G_CALLBACK(ScintillaGTK::RealizeText), NULL); +#endif +	gtk_widget_realize(widtxt);  	gtk_widget_realize(PWidget(scrollbarv));  	gtk_widget_realize(PWidget(scrollbarh));  } @@ -691,30 +711,45 @@ void ScintillaGTK::Initialise() {  	wText = gtk_drawing_area_new();  	gtk_widget_set_parent(PWidget(wText), PWidget(wMain)); -	gtk_widget_show(PWidget(wText)); -	gtk_signal_connect(GTK_OBJECT(PWidget(wText)), "expose_event", +	GtkWidget *widtxt = PWidget(wText);	// No code inside the G_OBJECT macro +	gtk_widget_show(widtxt); +#if GLIB_MAJOR_VERSION < 2 +	gtk_signal_connect(GTK_OBJECT(widtxt), "expose_event",  			   GtkSignalFunc(ScintillaGTK::ExposeText), this); -	gtk_widget_set_events(PWidget(wText), GDK_EXPOSURE_MASK); +#else +	g_signal_connect(G_OBJECT(widtxt), "expose_event", +			   G_CALLBACK(ScintillaGTK::ExposeText), this); +#endif +	gtk_widget_set_events(widtxt, GDK_EXPOSURE_MASK);  #if GTK_MAJOR_VERSION >= 2  	// Avoid background drawing flash -	gtk_widget_set_double_buffered(PWidget(wText), FALSE); +	gtk_widget_set_double_buffered(widtxt, FALSE);  #endif -	gtk_drawing_area_size(GTK_DRAWING_AREA(PWidget(wText)), +	gtk_drawing_area_size(GTK_DRAWING_AREA(widtxt),  	                      100,100); -  	adjustmentv = gtk_adjustment_new(0.0, 0.0, 201.0, 1.0, 20.0, 20.0);  	scrollbarv = gtk_vscrollbar_new(GTK_ADJUSTMENT(adjustmentv));  	GTK_WIDGET_UNSET_FLAGS(PWidget(scrollbarv), GTK_CAN_FOCUS); -	gtk_signal_connect(GTK_OBJECT(adjustmentv), "value_changed", -	                   GTK_SIGNAL_FUNC(ScrollSignal), this); +#if GLIB_MAJOR_VERSION < 2 +	gtk_signal_connect(adjustmentv, "value_changed", +			   GtkSignalFunc(ScrollSignal), this); +#else +	g_signal_connect(G_OBJECT(adjustmentv), "value_changed", +			   G_CALLBACK(ScrollSignal), this); +#endif  	gtk_widget_set_parent(PWidget(scrollbarv), PWidget(wMain));  	gtk_widget_show(PWidget(scrollbarv));  	adjustmenth = gtk_adjustment_new(0.0, 0.0, 101.0, 1.0, 20.0, 20.0);  	scrollbarh = gtk_hscrollbar_new(GTK_ADJUSTMENT(adjustmenth));  	GTK_WIDGET_UNSET_FLAGS(PWidget(scrollbarh), GTK_CAN_FOCUS); -	gtk_signal_connect(GTK_OBJECT(adjustmenth), "value_changed", -	                   GTK_SIGNAL_FUNC(ScrollHSignal), this); +#if GLIB_MAJOR_VERSION < 2 +	gtk_signal_connect(adjustmenth, "value_changed", +			   GtkSignalFunc(ScrollHSignal), this); +#else +	g_signal_connect(G_OBJECT(adjustmenth), "value_changed", +			   G_CALLBACK(ScrollHSignal), this); +#endif  	gtk_widget_set_parent(PWidget(scrollbarh), PWidget(wMain));  	gtk_widget_show(PWidget(scrollbarh)); @@ -752,8 +787,6 @@ void ScintillaGTK::StartDrag() {  	static const GtkTargetEntry targets[] = {  	    { "UTF8_STRING", 0, TARGET_UTF8_STRING },  	    { "STRING", 0, TARGET_STRING }, -	    // { "TEXT", 0, TARGET_TEXT }, -	    // { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },  	};  	static const gint n_targets = sizeof(targets) / sizeof(targets[0]);  	GtkTargetList *tl = gtk_target_list_new(targets, n_targets); @@ -1126,20 +1159,37 @@ void ScintillaGTK::ReconfigureScrollBars() {  }  void ScintillaGTK::NotifyChange() { +#if GLIB_MAJOR_VERSION < 2  	gtk_signal_emit(GTK_OBJECT(sci), scintilla_signals[COMMAND_SIGNAL],  	                Platform::LongFromTwoShorts(GetCtrlID(), SCEN_CHANGE), PWidget(wMain)); +#else +	g_signal_emit(G_OBJECT(sci), scintilla_signals[COMMAND_SIGNAL], 0, +	                Platform::LongFromTwoShorts(GetCtrlID(), SCEN_CHANGE), PWidget(wMain)); +#endif  }  void ScintillaGTK::NotifyFocus(bool focus) { +#if GLIB_MAJOR_VERSION < 2  	gtk_signal_emit(GTK_OBJECT(sci), scintilla_signals[COMMAND_SIGNAL], -	                Platform::LongFromTwoShorts(GetCtrlID(), focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS), PWidget(wMain)); +	                Platform::LongFromTwoShorts +					(GetCtrlID(), focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS), PWidget(wMain)); +#else +	g_signal_emit(G_OBJECT(sci), scintilla_signals[COMMAND_SIGNAL], 0, +	                Platform::LongFromTwoShorts +					(GetCtrlID(), focus ? SCEN_SETFOCUS : SCEN_KILLFOCUS), PWidget(wMain)); +#endif  }  void ScintillaGTK::NotifyParent(SCNotification scn) {  	scn.nmhdr.hwndFrom = PWidget(wMain);  	scn.nmhdr.idFrom = GetCtrlID(); +#if GLIB_MAJOR_VERSION < 2  	gtk_signal_emit(GTK_OBJECT(sci), scintilla_signals[NOTIFY_SIGNAL],  	                GetCtrlID(), &scn); +#else +	g_signal_emit(G_OBJECT(sci), scintilla_signals[NOTIFY_SIGNAL], 0, +	                GetCtrlID(), &scn); +#endif  }  void ScintillaGTK::NotifyKey(int key, int modifiers) { @@ -1344,12 +1394,20 @@ void ScintillaGTK::CreateCallTipWindow(PRectangle rc) {  	if (!ct.wCallTip.Created()) {  		ct.wCallTip = gtk_window_new(GTK_WINDOW_POPUP);  		ct.wDraw = gtk_drawing_area_new(); -		gtk_container_add(GTK_CONTAINER(PWidget(ct.wCallTip)), PWidget(ct.wDraw)); -		gtk_signal_connect(GTK_OBJECT(PWidget(ct.wDraw)), "expose_event", +		GtkWidget *widcdrw = PWidget(ct.wDraw);	//	// No code inside the G_OBJECT macro +		gtk_container_add(GTK_CONTAINER(PWidget(ct.wCallTip)), widcdrw); +#if GLIB_MAJOR_VERSION < 2 +		gtk_signal_connect(GTK_OBJECT(widcdrw), "expose_event",  				   GtkSignalFunc(ScintillaGTK::ExposeCT), &ct); -		gtk_signal_connect(GTK_OBJECT(PWidget(ct.wDraw)), "button_press_event", +		gtk_signal_connect(GTK_OBJECT(widcdrw), "button_press_event",  				   GtkSignalFunc(ScintillaGTK::PressCT), static_cast<void *>(this)); -		gtk_widget_set_events(PWidget(ct.wDraw), +#else +		g_signal_connect(G_OBJECT(widcdrw), "expose_event", +				   G_CALLBACK(ScintillaGTK::ExposeCT), &ct); +		g_signal_connect(G_OBJECT(widcdrw), "button_press_event", +				   G_CALLBACK(ScintillaGTK::PressCT), static_cast<void *>(this)); +#endif +		gtk_widget_set_events(widcdrw,  			GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);  	}  	gtk_drawing_area_size(GTK_DRAWING_AREA(PWidget(ct.wDraw)), @@ -1977,7 +2035,7 @@ static int KeyTranslate(int keyIn) {  	}  } -gint ScintillaGTK::KeyThis(GdkEventKey *event) { +gboolean ScintillaGTK::KeyThis(GdkEventKey *event) {  	//Platform::DebugPrintf("SC-key: %d %x [%s]\n",  	//	event->keyval, event->state, (event->length > 0) ? event->string : "empty");  #if GTK_MAJOR_VERSION >= 2 @@ -1994,7 +2052,7 @@ gint ScintillaGTK::KeyThis(GdkEventKey *event) {  	bool shift = (event->state & GDK_SHIFT_MASK) != 0;  	bool ctrl = (event->state & GDK_CONTROL_MASK) != 0;  	bool alt = (event->state & GDK_MOD1_MASK) != 0; -	int key = event->keyval; +	guint key = event->keyval;  	if (ctrl && (key < 128))  		key = toupper(key);  	else if (!ctrl && (key >= GDK_KP_Multiply && key <= GDK_KP_9)) @@ -2024,22 +2082,22 @@ gint ScintillaGTK::KeyThis(GdkEventKey *event) {  	return consumed;  } -gint ScintillaGTK::KeyPress(GtkWidget *widget, GdkEventKey *event) { +gboolean ScintillaGTK::KeyPress(GtkWidget *widget, GdkEventKey *event) {  	ScintillaGTK *sciThis = ScintillaFromWidget(widget);  	return sciThis->KeyThis(event);  } -gint ScintillaGTK::KeyRelease(GtkWidget *, GdkEventKey * /*event*/) { +gboolean ScintillaGTK::KeyRelease(GtkWidget *, GdkEventKey * /*event*/) {  	//Platform::DebugPrintf("SC-keyrel: %d %x %3s\n",event->keyval, event->state, event->string);  	return FALSE;  }  #if GTK_MAJOR_VERSION >= 2 -gint ScintillaGTK::ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis) { +gboolean ScintillaGTK::ExposePreedit(GtkWidget *widget, GdkEventExpose *ose, ScintillaGTK *sciThis) {  	return sciThis->ExposePreeditThis(widget, ose);  } -gint ScintillaGTK::ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose) { +gboolean ScintillaGTK::ExposePreeditThis(GtkWidget *widget, GdkEventExpose *ose) {  	gchar *str;  	gint cursor_pos;  	PangoAttrList *attrs; @@ -2127,7 +2185,12 @@ gint ScintillaGTK::RealizeText(GtkWidget *widget, void*) {  	return FALSE;  } -void ScintillaGTK::Destroy(GtkObject* object) { +#if GLIB_MAJOR_VERSION < 2 +void ScintillaGTK::Destroy(GtkObject *object) +#else +void ScintillaGTK::Destroy(GObject *object) +#endif +{  	ScintillaObject *scio = reinterpret_cast<ScintillaObject *>(object);  	// This avoids a double destruction  	if (!scio->pscin) @@ -2136,8 +2199,12 @@ void ScintillaGTK::Destroy(GtkObject* object) {  	//Platform::DebugPrintf("Destroying %x %x\n", sciThis, object);  	sciThis->Finalise(); +#if GLIB_MAJOR_VERSION < 2  	if (GTK_OBJECT_CLASS(parent_class)->destroy)  		(* GTK_OBJECT_CLASS(parent_class)->destroy)(object); +#else +	// IS ANYTHING NEEDED ? +#endif  	delete sciThis;  	scio->pscin = 0; @@ -2452,6 +2519,7 @@ static void scintilla_init(ScintillaObject *sci);  extern void Platform_Initialise();  extern void Platform_Finalise(); +#if GLIB_MAJOR_VERSION < 2  GtkType scintilla_get_type() {  	static GtkType scintilla_type = 0; @@ -2473,8 +2541,39 @@ GtkType scintilla_get_type() {  	return scintilla_type;  } +#else +GType scintilla_get_type() { +	static GType scintilla_type = 0; + +	if (!scintilla_type) { +		scintilla_type = g_type_from_name("Scintilla"); +		if (!scintilla_type) { +			static GTypeInfo scintilla_info = { +				(guint16) sizeof (ScintillaClass), +				NULL, //(GBaseInitFunc) +				NULL, //(GBaseFinalizeFunc) +				(GClassInitFunc) scintilla_class_init, +				NULL, //(GClassFinalizeFunc) +				NULL, //gconstpointer data +				(guint16) sizeof (ScintillaObject), +				0, //n_preallocs +				(GInstanceInitFunc) scintilla_init, +				NULL //(GTypeValueTable*) +			}; + +			scintilla_type = g_type_register_static( +				GTK_TYPE_CONTAINER, "Scintilla", &scintilla_info, (GTypeFlags) 0); +		} +	} -void ScintillaGTK::ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class) { +	return scintilla_type; +} +#endif + +void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_class, GtkContainerClass *container_class) { +#if GLIB_MAJOR_VERSION >= 2 +	Platform_Initialise(); +#endif  	atomClipboard = gdk_atom_intern("CLIPBOARD", FALSE);  	atomUTF8 = gdk_atom_intern("UTF8_STRING", FALSE);  	atomString = GDK_SELECTION_TYPE_STRING; @@ -2484,15 +2583,17 @@ void ScintillaGTK::ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widge  	// of the signal handlers here (those that currently attached to wDraw  	// in Initialise() may require coordinate translation?) +#if GLIB_MAJOR_VERSION < 2  	object_class->destroy = Destroy; - +#else +	object_class->finalize = Destroy; +#endif  	widget_class->size_request = SizeRequest;  	widget_class->size_allocate = SizeAllocate;  	widget_class->expose_event = ExposeMain;  #if GTK_MAJOR_VERSION < 2  	widget_class->draw = Draw;  #endif -  	widget_class->motion_notify_event = Motion;  	widget_class->button_press_event = Press;  	widget_class->button_release_event = MouseRelease; @@ -2525,19 +2626,21 @@ void ScintillaGTK::ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widge  	container_class->forall = MainForAll;  } -#if GTK_MAJOR_VERSION < 2 +#if GLIB_MAJOR_VERSION < 2  #define GTK_CLASS_TYPE(c) (c->type)  #define SIG_MARSHAL gtk_marshal_NONE__INT_POINTER +#define MARSHAL_ARGUMENTS GTK_TYPE_INT, GTK_TYPE_POINTER  #else  #define SIG_MARSHAL scintilla_marshal_NONE__INT_POINTER +#define MARSHAL_ARGUMENTS G_TYPE_INT, G_TYPE_POINTER  #endif -#define MARSHAL_ARGUMENTS GTK_TYPE_INT, GTK_TYPE_POINTER  static void scintilla_class_init(ScintillaClass *klass) { -	GtkObjectClass *object_class = (GtkObjectClass*) klass; +	OBJECT_CLASS *object_class = (OBJECT_CLASS*) klass;  	GtkWidgetClass *widget_class = (GtkWidgetClass*) klass;  	GtkContainerClass *container_class = (GtkContainerClass*) klass; +#if GLIB_MAJOR_VERSION < 2  	parent_class = (GtkWidgetClass*) gtk_type_class(gtk_container_get_type());  	scintilla_signals[COMMAND_SIGNAL] = gtk_signal_new( @@ -2557,9 +2660,31 @@ static void scintilla_class_init(ScintillaClass *klass) {  	                                       SIG_MARSHAL,  	                                       GTK_TYPE_NONE,  	                                       2, MARSHAL_ARGUMENTS); -#if GTK_MAJOR_VERSION < 2  	gtk_object_class_add_signals(object_class,  	                             reinterpret_cast<unsigned int *>(scintilla_signals), LAST_SIGNAL); +#else +	GSignalFlags sigflags = GSignalFlags(G_SIGNAL_ACTION | G_SIGNAL_RUN_LAST); +	scintilla_signals[COMMAND_SIGNAL] = g_signal_new( +	                                       "command", +	                                       G_TYPE_FROM_CLASS(object_class), +	                                       sigflags, +	                                       G_STRUCT_OFFSET(ScintillaClass, command), +	                                       NULL, //(GSignalAccumulator) +	                                       NULL, //(gpointer) +	                                       SIG_MARSHAL, +	                                       G_TYPE_NONE, +	                                       2, MARSHAL_ARGUMENTS); + +	scintilla_signals[NOTIFY_SIGNAL] = g_signal_new( +	                                       SCINTILLA_NOTIFY, +	                                       G_TYPE_FROM_CLASS(object_class), +	                                       sigflags, +	                                       G_STRUCT_OFFSET(ScintillaClass, notify), +	                                       NULL, +	                                       NULL, +	                                       SIG_MARSHAL, +	                                       G_TYPE_NONE, +	                                       2, MARSHAL_ARGUMENTS);  #endif  	klass->command = NULL;  	klass->notify = NULL; @@ -2573,7 +2698,11 @@ static void scintilla_init(ScintillaObject *sci) {  }  GtkWidget* scintilla_new() { +#if GLIB_MAJOR_VERSION < 2  	return GTK_WIDGET(gtk_type_new(scintilla_get_type())); +#else +	return GTK_WIDGET(g_object_new(scintilla_get_type(), NULL)); +#endif  }  void scintilla_set_id(ScintillaObject *sci, uptr_t id) { diff --git a/include/ScintillaWidget.h b/include/ScintillaWidget.h index 7f47de7e1..9d23ce2a9 100644 --- a/include/ScintillaWidget.h +++ b/include/ScintillaWidget.h @@ -34,7 +34,11 @@ struct _ScintillaClass {  	void (* notify) (ScintillaObject *ttt);  }; +#if GLIB_MAJOR_VERSION < 2  GtkType		scintilla_get_type	(void); +#else +GType		scintilla_get_type	(void); +#endif  GtkWidget*	scintilla_new		(void);  void		scintilla_set_id	(ScintillaObject *sci, uptr_t id);  sptr_t		scintilla_send_message	(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam); | 
