aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gtk/ScintillaGTK.cxx83
-rw-r--r--include/ScintillaWidget.h6
2 files changed, 69 insertions, 20 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index d3711dd63..a3b01deb0 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -42,6 +42,11 @@
#include "ScintillaBase.h"
#include "gtk/gtksignal.h"
+#include "gtk/gtkmarshal.h"
+
+#if GTK_MAJOR_VERSION < 2
+#define INTERNATIONAL_INPUT
+#endif
#ifdef _MSC_VER
// Constant conditional expressions are because of GTK+ headers
@@ -75,11 +80,11 @@ class ScintillaGTK : public ScintillaBase {
#if PLAT_GTK_WIN32
CLIPFORMAT cfColumnSelect;
#endif
-
+#ifdef INTERNATIONAL_INPUT
// Input context used for supporting internationalized key entry
GdkIC *ic;
GdkICAttr *ic_attr;
-
+#endif
// Wheel mouse support
unsigned int linesPerScroll;
GTimeVal lastWheelMouseTime;
@@ -219,7 +224,11 @@ ScintillaGTK::ScintillaGTK(_ScintillaObject *sci_) :
scrollBarWidth(30), scrollBarHeight(30),
capturedMouse(false), dragWasDropped(false),
parentClass(0),
- ic(NULL), ic_attr(NULL), lastWheelMouseDirection(0),
+#ifdef INTERNATIONAL_INPUT
+ ic(NULL),
+ ic_attr(NULL),
+#endif
+ lastWheelMouseDirection(0),
wheelMouseIntensity(0) {
sci = sci_;
wMain = GTK_WIDGET(sci);
@@ -269,7 +278,7 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) {
gdk_window_set_background(widget->window, &widget->style->bg[GTK_STATE_NORMAL]);
gdk_window_show(widget->window);
gdk_cursor_destroy(cursor);
-
+#ifdef INTERNATIONAL_INPUT
if (gdk_im_ready() && (ic_attr = gdk_ic_attr_new()) != NULL) {
gint width, height;
GdkColormap *colormap;
@@ -315,9 +324,9 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) {
}
ic = gdk_ic_new(attr, attrmask);
- if (ic == NULL)
+ if (ic == NULL) {
g_warning("Can't create input context.");
- else {
+ } else {
mask = gdk_window_get_events(widget->window);
mask = (GdkEventMask) ((int) mask | gdk_ic_get_events(ic));
gdk_window_set_events(widget->window, mask);
@@ -326,6 +335,7 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) {
gdk_im_begin(ic, widget->window);
}
}
+#endif
gtk_widget_realize(PWidget(scrollbarv));
gtk_widget_realize(PWidget(scrollbarh));
}
@@ -342,6 +352,7 @@ void ScintillaGTK::UnRealizeThis(GtkWidget *widget) {
GTK_WIDGET_UNSET_FLAGS(widget, GTK_REALIZED);
gtk_widget_unrealize(PWidget(scrollbarv));
gtk_widget_unrealize(PWidget(scrollbarh));
+#ifdef INTERNATIONAL_INPUT
if (ic) {
gdk_ic_destroy(ic);
ic = NULL;
@@ -350,10 +361,9 @@ void ScintillaGTK::UnRealizeThis(GtkWidget *widget) {
gdk_ic_attr_destroy(ic_attr);
ic_attr = NULL;
}
+#endif
if (GTK_WIDGET_CLASS(parentClass)->unrealize)
GTK_WIDGET_CLASS(parentClass)->unrealize(widget);
- //gdk_window_destroy(widget->window);
- //widget->window = 0;
Finalise();
}
@@ -399,6 +409,7 @@ void ScintillaGTK::UnMap(GtkWidget *widget) {
sciThis->UnMapThis();
}
+#ifdef INTERNATIONAL_INPUT
gint ScintillaGTK::CursorMoved(GtkWidget *widget, int xoffset, int yoffset, ScintillaGTK *sciThis) {
if (GTK_WIDGET_HAS_FOCUS(widget) && gdk_im_ready() && sciThis->ic &&
(gdk_ic_get_style (sciThis->ic) & GDK_IM_PREEDIT_POSITION)) {
@@ -408,6 +419,11 @@ gint ScintillaGTK::CursorMoved(GtkWidget *widget, int xoffset, int yoffset, Scin
}
return FALSE;
}
+#else
+gint ScintillaGTK::CursorMoved(GtkWidget *, int, int, ScintillaGTK *) {
+ return FALSE;
+}
+#endif
gint ScintillaGTK::FocusIn(GtkWidget *widget, GdkEventFocus * /*event*/) {
ScintillaGTK *sciThis = ScintillaFromWidget(widget);
@@ -415,8 +431,10 @@ gint ScintillaGTK::FocusIn(GtkWidget *widget, GdkEventFocus * /*event*/) {
GTK_WIDGET_SET_FLAGS(widget, GTK_HAS_FOCUS);
sciThis->SetFocusState(true);
+#ifdef INTERNATIONAL_INPUT
if (sciThis->ic)
gdk_im_begin(sciThis->ic, widget->window);
+#endif
return FALSE;
}
@@ -427,7 +445,9 @@ gint ScintillaGTK::FocusOut(GtkWidget *widget, GdkEventFocus * /*event*/) {
GTK_WIDGET_UNSET_FLAGS(widget, GTK_HAS_FOCUS);
sciThis->SetFocusState(false);
+#ifdef INTERNATIONAL_INPUT
gdk_im_end();
+#endif
return FALSE;
}
@@ -442,8 +462,6 @@ void ScintillaGTK::SizeRequest(GtkWidget *widget, GtkRequisition *requisition) {
}
void ScintillaGTK::SizeAllocate(GtkWidget *widget, GtkAllocation *allocation) {
- //Platform::DebugPrintf(stderr, "size_allocate %p %0d,%0d %0d,%0d\n", widget,
- // widget->allocation.x, widget->allocation.y, allocation->width, allocation->height);
widget->allocation = *allocation;
ScintillaGTK *sciThis = ScintillaFromWidget(widget);
if (GTK_WIDGET_REALIZED(widget))
@@ -455,6 +473,7 @@ void ScintillaGTK::SizeAllocate(GtkWidget *widget, GtkAllocation *allocation) {
sciThis->Resize(allocation->width, allocation->height);
+#ifdef INTERNATIONAL_INPUT
if (sciThis->ic && (gdk_ic_get_style (sciThis->ic) & GDK_IM_PREEDIT_POSITION)) {
gint width, height;
@@ -464,6 +483,7 @@ void ScintillaGTK::SizeAllocate(GtkWidget *widget, GtkAllocation *allocation) {
gdk_ic_set_attr(sciThis->ic, sciThis->ic_attr, GDK_IC_PREEDIT_AREA);
}
+#endif
}
void ScintillaGTK::Initialise() {
@@ -822,10 +842,15 @@ void ScintillaGTK::AddToPopUp(const char *label, int cmd, bool enabled) {
char fulllabel[200];
strcpy(fulllabel, "/");
strcat(fulllabel, label);
+ GtkItemFactoryCallback menuSig = GtkItemFactoryCallback(PopUpCB);
GtkItemFactoryEntry itemEntry = {
fulllabel, NULL,
- GTK_SIGNAL_FUNC(ScintillaGTK::PopUpCB), cmd,
- const_cast<gchar *>(label[0] ? "<Item>" : "<Separator>")
+ menuSig,
+ cmd,
+ const_cast<gchar *>(label[0] ? "<Item>" : "<Separator>"),
+#if GTK_MAJOR_VERSION >= 2
+ NULL
+#endif
};
gtk_item_factory_create_item(GTK_ITEM_FACTORY(popup.GetID()),
&itemEntry, this, 1);
@@ -1425,6 +1450,15 @@ gint ScintillaGTK::Expose(GtkWidget *, GdkEventExpose *ose, ScintillaGTK *sciThi
}
sciThis->paintState = notPainting;
+#if GTK_MAJOR_VERSION >= 2
+ gtk_container_propagate_expose(GTK_CONTAINER(PWidget(sciThis->wMain)),
+ PWidget(sciThis->scrollbarh),
+ ose);
+ gtk_container_propagate_expose(GTK_CONTAINER(PWidget(sciThis->wMain)),
+ PWidget(sciThis->scrollbarv),
+ ose);
+#endif
+
return FALSE;
}
@@ -1598,7 +1632,9 @@ void ScintillaGTK::ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widge
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;
@@ -1628,33 +1664,40 @@ void ScintillaGTK::ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widge
widget_class->unmap = UnMap;
}
+#if GTK_MAJOR_VERSION < 2
+#define GTK_CLASS_TYPE(c) (c->type)
+#define SIG_MARSHAL gtk_marshal_NONE__INT_POINTER
+#else
+#define SIG_MARSHAL gtk_marshal_NONE__INT_INT
+#endif
+
static void scintilla_class_init(ScintillaClass *klass) {
GtkObjectClass *object_class = (GtkObjectClass*) klass;
GtkWidgetClass *widget_class = (GtkWidgetClass*) klass;
- parent_class = (GtkWidgetClass*) gtk_type_class (gtk_container_get_type ());
+ parent_class = (GtkWidgetClass*) gtk_type_class(gtk_container_get_type());
scintilla_signals[COMMAND_SIGNAL] = gtk_signal_new(
"command",
GTK_RUN_LAST,
- object_class->type,
+ GTK_CLASS_TYPE(object_class),
GTK_SIGNAL_OFFSET(ScintillaClass, command),
- gtk_marshal_NONE__INT_POINTER,
+ SIG_MARSHAL,
GTK_TYPE_NONE,
2, GTK_TYPE_INT, GTK_TYPE_POINTER);
scintilla_signals[NOTIFY_SIGNAL] = gtk_signal_new(
- "notify",
+ SCINTILLA_NOTIFY,
GTK_RUN_LAST,
- object_class->type,
+ GTK_CLASS_TYPE(object_class),
GTK_SIGNAL_OFFSET(ScintillaClass, notify),
- gtk_marshal_NONE__INT_POINTER,
+ SIG_MARSHAL,
GTK_TYPE_NONE,
2, GTK_TYPE_INT, GTK_TYPE_POINTER);
-
+#if GTK_MAJOR_VERSION < 2
gtk_object_class_add_signals(object_class,
reinterpret_cast<unsigned int *>(scintilla_signals), LAST_SIGNAL);
-
+#endif
klass->command = NULL;
klass->notify = NULL;
diff --git a/include/ScintillaWidget.h b/include/ScintillaWidget.h
index e11159722..203f35733 100644
--- a/include/ScintillaWidget.h
+++ b/include/ScintillaWidget.h
@@ -39,6 +39,12 @@ GtkWidget* scintilla_new (void);
void scintilla_set_id (ScintillaObject *sci,int id);
sptr_t scintilla_send_message (ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+#if GTK_MAJOR_VERSION < 2
+#define SCINTILLA_NOTIFY "notify"
+#else
+#define SCINTILLA_NOTIFY "sci-notify"
+#endif
+
#ifdef __cplusplus
}
#endif