Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Thu, 26 May 2016 17:21:38 UTC Commit: 64025cfcfc1582f2aff58f9933f0d49ba080a6cf https://github.com/geany/geany/commit/64025cfcfc1582f2aff58f9933f0d49ba080a6...
Log Message: ----------- Update Scintilla to version 3.6.6
Modified Paths: -------------- scintilla/gtk/Converter.h scintilla/gtk/PlatGTK.cxx scintilla/gtk/ScintillaGTK.cxx scintilla/gtk/scintilla-marshal.c scintilla/gtk/scintilla-marshal.h scintilla/gtk/scintilla-marshal.list scintilla/include/Scintilla.h scintilla/include/Scintilla.iface scintilla/include/ScintillaWidget.h scintilla/scintilla_changes.patch scintilla/src/Document.cxx scintilla/src/Editor.cxx scintilla/src/Editor.h scintilla/version.txt
Modified: scintilla/gtk/Converter.h 31 lines changed, 11 insertions(+), 20 deletions(-) =================================================================== @@ -10,21 +10,13 @@ namespace Scintilla { #endif
-typedef GIConv ConverterHandle; -const ConverterHandle iconvhBad = (ConverterHandle)(-1); -// Since various versions of iconv can not agree on whether the src argument -// is char ** or const char ** provide a templatised adaptor. -template<typename T> -size_t iconv_adaptor(size_t(*f_iconv)(ConverterHandle, T, size_t *, char **, size_t *), - ConverterHandle cd, char** src, size_t *srcleft, - char **dst, size_t *dstleft) { - return f_iconv(cd, (T)src, srcleft, dst, dstleft); -} +const GIConv iconvhBad = (GIConv)(-1); +const gsize sizeFailure = static_cast<gsize>(-1); /** - * Encapsulate iconv safely and avoid iconv_adaptor complexity in client code. + * Encapsulate g_iconv safely. */ class Converter { - ConverterHandle iconvh; + GIConv iconvh; void OpenHandle(const char *fullDestination, const char *charSetSource) { iconvh = g_iconv_open(fullDestination, charSetSource); } @@ -45,15 +37,14 @@ class Converter { operator bool() const { return Succeeded(); } - void Open(const char *charSetDestination, const char *charSetSource, bool transliterations=true) { + void Open(const char *charSetDestination, const char *charSetSource, bool transliterations) { Close(); if (*charSetSource) { // Try allowing approximate transliterations if (transliterations) { - char fullDest[200]; - g_strlcpy(fullDest, charSetDestination, sizeof(fullDest)); - g_strlcat(fullDest, "//TRANSLIT", sizeof(fullDest)); - OpenHandle(fullDest, charSetSource); + std::string fullDest(charSetDestination); + fullDest.append("//TRANSLIT"); + OpenHandle(fullDest.c_str(), charSetSource); } if (!Succeeded()) { // Transliterations failed so try basic name @@ -67,11 +58,11 @@ class Converter { iconvh = iconvhBad; } } - size_t Convert(char** src, size_t *srcleft, char **dst, size_t *dstleft) const { + gsize Convert(char** src, gsize *srcleft, char **dst, gsize *dstleft) const { if (!Succeeded()) { - return (size_t)(-1); + return sizeFailure; } else { - return iconv_adaptor(g_iconv, iconvh, src, srcleft, dst, dstleft); + return g_iconv(iconvh, src, srcleft, dst, dstleft); } } };
Modified: scintilla/gtk/PlatGTK.cxx 16 lines changed, 8 insertions(+), 8 deletions(-) =================================================================== @@ -655,12 +655,12 @@ static std::string UTF8FromIconv(const Converter &conv, const char *s, int len) if (conv) { std::string utfForm(len*3+1, '\0'); char *pin = const_cast<char *>(s); - size_t inLeft = len; + gsize inLeft = len; char *putf = &utfForm[0]; char *pout = putf; - size_t outLeft = len*3+1; - size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); - if (conversions != ((size_t)(-1))) { + gsize outLeft = len*3+1; + gsize conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); + if (conversions != sizeFailure) { *pout = '\0'; utfForm.resize(pout - putf); return utfForm; @@ -675,11 +675,11 @@ static size_t MultiByteLenFromIconv(const Converter &conv, const char *s, size_t for (size_t lenMB=1; (lenMB<4) && (lenMB <= len); lenMB++) { char wcForm[2]; char *pin = const_cast<char *>(s); - size_t inLeft = lenMB; + gsize inLeft = lenMB; char *pout = wcForm; - size_t outLeft = 2; - size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); - if (conversions != ((size_t)(-1))) { + gsize outLeft = 2; + gsize conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); + if (conversions != sizeFailure) { return lenMB; } }
Modified: scintilla/gtk/ScintillaGTK.cxx 60 lines changed, 41 insertions(+), 19 deletions(-) =================================================================== @@ -933,15 +933,15 @@ static std::string ConvertText(const char *s, size_t len, const char *charSetDes std::string destForm; Converter conv(charSetDest, charSetSource, transliterations); if (conv) { - size_t outLeft = len*3+1; + gsize outLeft = len*3+1; destForm = std::string(outLeft, '\0'); // g_iconv does not actually write to its input argument so safe to cast away const char *pin = const_cast<char *>(s); - size_t inLeft = len; + gsize inLeft = len; char *putf = &destForm[0]; char *pout = putf; - size_t conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); - if (conversions == ((size_t)(-1))) { + gsize conversions = conv.Convert(&pin, &inLeft, &pout, &outLeft); + if (conversions == sizeFailure) { if (!silent) { if (len == 1) fprintf(stderr, "iconv %s->%s failed for %0x '%s'\n", @@ -1181,7 +1181,7 @@ void ScintillaGTK::FullPaint() { }
PRectangle ScintillaGTK::GetClientRectangle() const { - Window &win = const_cast<Window &>(wMain); + Window win = wMain; PRectangle rc = win.GetClientPosition(); if (verticalScrollBarVisible) rc.right -= verticalScrollBarWidth; @@ -1736,14 +1736,21 @@ void ScintillaGTK::Resize(int width, int height) { //Platform::DebugPrintf("Resize %d %d\n", width, height); //printf("Resize %d %d\n", width, height);
+ // GTK+ 3 warns when we allocate smaller than the minimum allocation, + // so we use these variables to store the minimum scrollbar lengths. + int minVScrollBarHeight, minHScrollBarWidth; + // Not always needed, but some themes can have different sizes of scrollbars #if GTK_CHECK_VERSION(3,0,0) - GtkRequisition requisition; - gtk_widget_get_preferred_size(PWidget(scrollbarv), NULL, &requisition); + GtkRequisition minimum, requisition; + gtk_widget_get_preferred_size(PWidget(scrollbarv), &minimum, &requisition); + minVScrollBarHeight = minimum.height; verticalScrollBarWidth = requisition.width; - gtk_widget_get_preferred_size(PWidget(scrollbarh), NULL, &requisition); + gtk_widget_get_preferred_size(PWidget(scrollbarh), &minimum, &requisition); + minHScrollBarWidth = minimum.height; horizontalScrollBarHeight = requisition.height; #else + minVScrollBarHeight = minHScrollBarWidth = 1; verticalScrollBarWidth = GTK_WIDGET(PWidget(scrollbarv))->requisition.width; horizontalScrollBarHeight = GTK_WIDGET(PWidget(scrollbarh))->requisition.height; #endif @@ -1757,7 +1764,7 @@ void ScintillaGTK::Resize(int width, int height) { gtk_widget_show(GTK_WIDGET(PWidget(scrollbarh))); alloc.x = 0; alloc.y = height - horizontalScrollBarHeight; - alloc.width = Platform::Maximum(1, width - verticalScrollBarWidth); + alloc.width = Platform::Maximum(minHScrollBarWidth, width - verticalScrollBarWidth); alloc.height = horizontalScrollBarHeight; gtk_widget_size_allocate(GTK_WIDGET(PWidget(scrollbarh)), &alloc); } else { @@ -1770,7 +1777,7 @@ void ScintillaGTK::Resize(int width, int height) { alloc.x = width - verticalScrollBarWidth; alloc.y = 0; alloc.width = verticalScrollBarWidth; - alloc.height = Platform::Maximum(1, height - horizontalScrollBarHeight); + alloc.height = Platform::Maximum(minVScrollBarHeight, height - horizontalScrollBarHeight); gtk_widget_size_allocate(GTK_WIDGET(PWidget(scrollbarv)), &alloc); } else { gtk_widget_hide(GTK_WIDGET(PWidget(scrollbarv))); @@ -3166,9 +3173,6 @@ void ScintillaGTK::ClassInit(OBJECT_CLASS* object_class, GtkWidgetClass *widget_ container_class->forall = MainForAll; }
-#define SIG_MARSHAL scintilla_marshal_NONE__INT_POINTER -#define MARSHAL_ARGUMENTS G_TYPE_INT, G_TYPE_POINTER - static void scintilla_class_init(ScintillaClass *klass) { try { OBJECT_CLASS *object_class = (OBJECT_CLASS*) klass; @@ -3183,20 +3187,20 @@ static void scintilla_class_init(ScintillaClass *klass) { G_STRUCT_OFFSET(ScintillaClass, command), NULL, //(GSignalAccumulator) NULL, //(gpointer) - SIG_MARSHAL, + scintilla_marshal_VOID__INT_OBJECT, G_TYPE_NONE, - 2, MARSHAL_ARGUMENTS); + 2, G_TYPE_INT, GTK_TYPE_WIDGET);
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, + NULL, //(GSignalAccumulator) + NULL, //(gpointer) + scintilla_marshal_VOID__INT_BOXED, G_TYPE_NONE, - 2, MARSHAL_ARGUMENTS); + 2, G_TYPE_INT, SCINTILLA_TYPE_NOTIFICATION);
klass->command = NULL; klass->notify = NULL; @@ -3239,3 +3243,21 @@ void scintilla_release_resources(void) { } catch (...) { } } + +/* Define a dummy boxed type because g-ir-scanner is unable to + * recognize gpointer-derived types. Note that SCNotificaiton + * is always allocated on stack so copying is not appropriate. */ +static void *copy_(void *src) { return src; } +static void free_(void *doc) { } + +GType scnotification_get_type(void) { + static gsize type_id = 0; + if (g_once_init_enter(&type_id)) { + gsize id = (gsize) g_boxed_type_register_static( + g_intern_static_string("SCNotification"), + (GBoxedCopyFunc) copy_, + (GBoxedFreeFunc) free_); + g_once_init_leave(&type_id, id); + } + return (GType) type_id; +}
Modified: scintilla/gtk/scintilla-marshal.c 73 lines changed, 56 insertions(+), 17 deletions(-) =================================================================== @@ -4,7 +4,7 @@
#ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) -#define g_marshal_value_peek_char(v) g_value_get_char (v) +#define g_marshal_value_peek_char(v) g_value_get_schar (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) @@ -21,6 +21,7 @@ #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) +#define g_marshal_value_peek_variant(v) g_value_get_variant (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the @@ -44,25 +45,26 @@ #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */
-/* NONE:INT,POINTER (scintilla-marshal.list:1) */ +/* NONE:INT,OBJECT (scintilla-marshal.list:1) */ void -scintilla_marshal_VOID__INT_POINTER (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) +scintilla_marshal_VOID__INT_OBJECT (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) { - typedef void (*GMarshalFunc_VOID__INT_POINTER) (gpointer data1, - gint arg_1, - gpointer arg_2, - gpointer data2); - register GMarshalFunc_VOID__INT_POINTER callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; + typedef void (*GMarshalFunc_VOID__INT_OBJECT) (gpointer data1, + gint arg_1, + gpointer arg_2, + gpointer data2); + GMarshalFunc_VOID__INT_OBJECT callback; + GCClosure *cc = (GCClosure*) closure; + gpointer data1, data2;
g_return_if_fail (n_param_values == 3);
@@ -76,11 +78,48 @@ scintilla_marshal_VOID__INT_POINTER (GClosure *closure, data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } - callback = (GMarshalFunc_VOID__INT_POINTER) (marshal_data ? marshal_data : cc->callback); + callback = (GMarshalFunc_VOID__INT_OBJECT) (marshal_data ? marshal_data : cc->callback);
callback (data1, g_marshal_value_peek_int (param_values + 1), - g_marshal_value_peek_pointer (param_values + 2), + g_marshal_value_peek_object (param_values + 2), + data2); +} + +/* NONE:INT,BOXED (scintilla-marshal.list:2) */ +void +scintilla_marshal_VOID__INT_BOXED (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef void (*GMarshalFunc_VOID__INT_BOXED) (gpointer data1, + gint arg_1, + gpointer arg_2, + gpointer data2); + GMarshalFunc_VOID__INT_BOXED callback; + GCClosure *cc = (GCClosure*) closure; + gpointer data1, data2; + + g_return_if_fail (n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__INT_BOXED) (marshal_data ? marshal_data : cc->callback); + + callback (data1, + g_marshal_value_peek_int (param_values + 1), + g_marshal_value_peek_boxed (param_values + 2), data2); }
Modified: scintilla/gtk/scintilla-marshal.h 25 lines changed, 17 insertions(+), 8 deletions(-) =================================================================== @@ -6,14 +6,23 @@
G_BEGIN_DECLS
-/* NONE:INT,POINTER (scintilla-marshal.list:1) */ -extern void scintilla_marshal_VOID__INT_POINTER (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); -#define scintilla_marshal_NONE__INT_POINTER scintilla_marshal_VOID__INT_POINTER +/* NONE:INT,OBJECT (scintilla-marshal.list:1) */ +extern void scintilla_marshal_VOID__INT_OBJECT (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +#define scintilla_marshal_NONE__INT_OBJECT scintilla_marshal_VOID__INT_OBJECT + +/* NONE:INT,BOXED (scintilla-marshal.list:2) */ +extern void scintilla_marshal_VOID__INT_BOXED (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); +#define scintilla_marshal_NONE__INT_BOXED scintilla_marshal_VOID__INT_BOXED
G_END_DECLS
Modified: scintilla/gtk/scintilla-marshal.list 3 lines changed, 2 insertions(+), 1 deletions(-) =================================================================== @@ -1 +1,2 @@ -NONE:INT,POINTER +NONE:INT,OBJECT +NONE:INT,BOXED
Modified: scintilla/include/Scintilla.h 9 lines changed, 8 insertions(+), 1 deletions(-) =================================================================== @@ -1121,6 +1121,13 @@ struct Sci_RangeToFormat {
#define RangeToFormat Sci_RangeToFormat
+#ifndef __cplusplus +/* For the GTK+ platform, g-ir-scanner needs to have these typedefs. This + * is not required in C++ code and actually seems to break ScintillaEditPy */ +typedef struct Sci_NotifyHeader Sci_NotifyHeader; +typedef struct SCNotification SCNotification; +#endif + struct Sci_NotifyHeader { /* Compatible with Windows NMHDR. * hwndFrom is really an environment specific window handle or pointer @@ -1133,7 +1140,7 @@ struct Sci_NotifyHeader { #define NotifyHeader Sci_NotifyHeader
struct SCNotification { - struct Sci_NotifyHeader nmhdr; + Sci_NotifyHeader nmhdr; Sci_Position position; /* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, */ /* SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, */
Modified: scintilla/include/Scintilla.iface 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -4729,7 +4729,7 @@ evt void FocusIn=2028(void) evt void FocusOut=2029(void) evt void AutoCCompleted=2030(string text, int position, int ch, CompletionMethods listCompletionMethod)
-# There are no provisional features currently +# There are no provisional APIs currently, but some arguments to SCI_SETTECHNOLOGY are provisional.
cat Provisional
Modified: scintilla/include/ScintillaWidget.h 8 lines changed, 6 insertions(+), 2 deletions(-) =================================================================== @@ -38,14 +38,18 @@ struct _ScintillaObject { struct _ScintillaClass { GtkContainerClass parent_class;
- void (* command) (ScintillaObject *ttt); - void (* notify) (ScintillaObject *ttt); + void (* command) (ScintillaObject *sci, int cmd, GtkWidget *window); + void (* notify) (ScintillaObject *sci, int id, SCNotification *scn); };
GType scintilla_object_get_type (void); GtkWidget* scintilla_object_new (void); gintptr scintilla_object_send_message (ScintillaObject *sci, unsigned int iMessage, guintptr wParam, gintptr lParam);
+ +GType scnotification_get_type (void); +#define SCINTILLA_TYPE_NOTIFICATION (scnotification_get_type()) + #ifndef G_IR_SCANNING /* The legacy names confuse the g-ir-scanner program */ typedef struct _ScintillaClass ScintillaClass;
Modified: scintilla/scintilla_changes.patch 28 lines changed, 0 insertions(+), 28 deletions(-) =================================================================== @@ -50,34 +50,6 @@ index 0871ca2..49dc278 100644 GtkWidget *scintilla_object_new() { return scintilla_new(); } -diff --git scintilla/gtk/scintilla-marshal.c scintilla/gtk/scintilla-marshal.c -index be57b7c..cee3e73 100644 ---- scintilla/gtk/scintilla-marshal.c -+++ scintilla/gtk/scintilla-marshal.c -@@ -35,8 +35,8 @@ - #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong - #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 - #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 --#define g_marshal_value_peek_enum(v) (v)->data[0].v_int --#define g_marshal_value_peek_flags(v) (v)->data[0].v_uint -+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long -+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong - #define g_marshal_value_peek_float(v) (v)->data[0].v_float - #define g_marshal_value_peek_double(v) (v)->data[0].v_double - #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer -@@ -50,10 +50,10 @@ - /* NONE:INT,POINTER (scintilla-marshal.list:1) */ - void - scintilla_marshal_VOID__INT_POINTER (GClosure *closure, -- GValue *return_value, -+ GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, -- gpointer invocation_hint, -+ gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) - { - typedef void (*GMarshalFunc_VOID__INT_POINTER) (gpointer data1, diff --git scintilla/src/Catalogue.cxx scintilla/src/Catalogue.cxx index ed47aa8..e58f1ab 100644 --- scintilla/src/Catalogue.cxx
Modified: scintilla/src/Document.cxx 6 lines changed, 3 insertions(+), 3 deletions(-) =================================================================== @@ -16,7 +16,7 @@ #include <vector> #include <algorithm>
-#ifdef CXX11_REGEX +#ifndef NO_CXX11_REGEX #include <regex> #endif
@@ -2336,7 +2336,7 @@ class DocumentIndexer : public CharacterIndexer { } };
-#ifdef CXX11_REGEX +#ifndef NO_CXX11_REGEX
class ByteIterator : public std::iterator<std::bidirectional_iterator_tag, char> { public: @@ -2696,7 +2696,7 @@ long BuiltinRegex::FindText(Document *doc, int minPos, int maxPos, const char *s bool caseSensitive, bool, bool, int flags, int *length) {
-#ifdef CXX11_REGEX +#ifndef NO_CXX11_REGEX if (flags & SCFIND_CXX11REGEX) { return Cxx11RegexFindText(doc, minPos, maxPos, s, caseSensitive, length, search);
Modified: scintilla/src/Editor.cxx 6 lines changed, 5 insertions(+), 1 deletions(-) =================================================================== @@ -303,7 +303,7 @@ int Editor::TopLineOfMain() const { }
PRectangle Editor::GetClientRectangle() const { - Window &win = const_cast<Window &>(wMain); + Window win = wMain; return win.GetClientPosition(); }
@@ -828,6 +828,7 @@ void Editor::MovedCaret(SelectionPosition newPos, SelectionPosition previousPos, }
ShowCaretAtCurrentPosition(); + NotifyCaretMove();
ClaimSelection(); SetHoverIndicatorPosition(sel.MainCaret()); @@ -1437,6 +1438,9 @@ void Editor::InvalidateCaret() { UpdateSystemCaret(); }
+void Editor::NotifyCaretMove() { +} + void Editor::UpdateSystemCaret() { }
Modified: scintilla/src/Editor.h 1 lines changed, 1 insertions(+), 0 deletions(-) =================================================================== @@ -365,6 +365,7 @@ class Editor : public EditModel, public DocWatcher { void DropCaret(); void CaretSetPeriod(int period); void InvalidateCaret(); + virtual void NotifyCaretMove(); virtual void UpdateSystemCaret();
bool Wrapping() const;
Modified: scintilla/version.txt 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -1 +1 @@ -365 +366
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).