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); |