aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gtk/PlatGTK.cxx34
-rw-r--r--gtk/ScintillaGTK.cxx231
-rw-r--r--include/ScintillaWidget.h4
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), &current);
- gtk_signal_connect(GTK_OBJECT(PWidget(list)), "select_row",
+ gtk_signal_connect(GTK_OBJECT(wid), "select_row",
GTK_SIGNAL_FUNC(SelectionAC), &current);
- 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);