diff options
Diffstat (limited to 'src/scintilla_backports/6364_383b9c10d569.patch')
-rw-r--r-- | src/scintilla_backports/6364_383b9c10d569.patch | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/scintilla_backports/6364_383b9c10d569.patch b/src/scintilla_backports/6364_383b9c10d569.patch new file mode 100644 index 00000000..ece3b53d --- /dev/null +++ b/src/scintilla_backports/6364_383b9c10d569.patch @@ -0,0 +1,131 @@ +# HG changeset patch +# User Neil Hodgson <nyamatongwe@gmail.com> +# Date 1501291429 -36000 +# Node ID 383b9c10d569932a0db878bc9f8b9f8acb21d4e3 +# Parent 69fddf8f8a15101fdd7e670bcdc664f5e910ff99 +Bug [#1876]. Fix scrollbar and corner drawing and flickering of text. + +diff -r 69fddf8f8a15 -r 383b9c10d569 doc/ScintillaHistory.html +--- a/doc/ScintillaHistory.html Sat Jul 29 11:12:24 2017 +1000 ++++ b/doc/ScintillaHistory.html Sat Jul 29 11:23:49 2017 +1000 +@@ -580,6 +580,10 @@ + <a href="http://sourceforge.net/p/scintilla/bugs/1949/">Bug #1949</a>. + </li> + <li> ++ On GTK+ fix drawing problems including incorrect scrollbar redrawing and flickering of text. ++ <a href="http://sourceforge.net/p/scintilla/bugs/1876">Bug #1876</a>. ++ </li> ++ <li> + On Cocoa, fix doCommandBySelector but avoid double effect of 'delete' + key. + <a href="http://sourceforge.net/p/scintilla/bugs/1958">Bug #1958</a>. +diff -r 69fddf8f8a15 -r 383b9c10d569 gtk/ScintillaGTK.cxx +--- a/gtk/ScintillaGTK.cxx Sat Jul 29 11:12:24 2017 +1000 ++++ b/gtk/ScintillaGTK.cxx Sat Jul 29 11:23:49 2017 +1000 +@@ -297,7 +297,9 @@ + gdk_window_set_cursor(PWindow(scrollbarh), cursor); + UnRefCursor(cursor); + +- gtk_selection_add_targets(widget, GDK_SELECTION_PRIMARY, ++ g_signal_connect(PWidget(wSelection), "selection_get", G_CALLBACK(PrimarySelection), (gpointer) this); ++ g_signal_connect(PWidget(wSelection), "selection_clear_event", G_CALLBACK(PrimaryClear), (gpointer) this); ++ gtk_selection_add_targets(PWidget(wSelection), GDK_SELECTION_PRIMARY, + clipboardCopyTargets, nClipboardCopyTargets); + } + +@@ -308,7 +310,7 @@ + + void ScintillaGTK::UnRealizeThis(GtkWidget *widget) { + try { +- gtk_selection_clear_targets(widget, GDK_SELECTION_PRIMARY); ++ gtk_selection_clear_targets(PWidget(wSelection), GDK_SELECTION_PRIMARY); + + if (IS_WIDGET_MAPPED(widget)) { + gtk_widget_unmap(widget); +@@ -542,6 +544,8 @@ + } + #endif + ++ wSelection = gtk_invisible_new(); ++ + gtk_widget_set_can_focus(PWidget(wMain), TRUE); + gtk_widget_set_sensitive(PWidget(wMain), TRUE); + gtk_widget_set_events(PWidget(wMain), +@@ -664,6 +668,8 @@ + accessible = 0; + } + ++ wSelection.Destroy(); ++ + ScintillaBase::Finalise(); + } + +@@ -1336,16 +1342,16 @@ + + bool ScintillaGTK::OwnPrimarySelection() { + return ((gdk_selection_owner_get(GDK_SELECTION_PRIMARY) +- == PWindow(wMain)) && +- (PWindow(wMain) != NULL)); ++ == PWindow(wSelection)) && ++ (PWindow(wSelection) != NULL)); + } + + void ScintillaGTK::ClaimSelection() { + // X Windows has a 'primary selection' as well as the clipboard. + // Whenever the user selects some text, we become the primary selection +- if (!sel.Empty() && IS_WIDGET_REALIZED(GTK_WIDGET(PWidget(wMain)))) { ++ if (!sel.Empty() && IS_WIDGET_REALIZED(GTK_WIDGET(PWidget(wSelection)))) { + primarySelection = true; +- gtk_selection_owner_set(GTK_WIDGET(PWidget(wMain)), ++ gtk_selection_owner_set(GTK_WIDGET(PWidget(wSelection)), + GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME); + primary.Clear(); + } else if (OwnPrimarySelection()) { +@@ -1554,6 +1560,27 @@ + } + } + ++void ScintillaGTK::PrimarySelection(GtkWidget *, GtkSelectionData *selection_data, guint info, guint, ScintillaGTK *sciThis) { ++ try { ++ if (SelectionOfGSD(selection_data) == GDK_SELECTION_PRIMARY) { ++ if (sciThis->primary.Empty()) { ++ sciThis->CopySelectionRange(&sciThis->primary); ++ } ++ sciThis->GetSelection(selection_data, info, &sciThis->primary); ++ } ++ } catch (...) { ++ sciThis->errorStatus = SC_STATUS_FAILURE; ++ } ++} ++ ++gboolean ScintillaGTK::PrimaryClear(GtkWidget *widget, GdkEventSelection *event, ScintillaGTK *sciThis) { ++ sciThis->UnclaimSelection(event); ++ if (GTK_WIDGET_CLASS(sciThis->parentClass)->selection_clear_event) { ++ return GTK_WIDGET_CLASS(sciThis->parentClass)->selection_clear_event(widget, event); ++ } ++ return TRUE; ++} ++ + void ScintillaGTK::Resize(int width, int height) { + //Platform::DebugPrintf("Resize %d %d\n", width, height); + //printf("Resize %d %d\n", width, height); +diff -r 69fddf8f8a15 -r 383b9c10d569 gtk/ScintillaGTK.h +--- a/gtk/ScintillaGTK.h Sat Jul 29 11:12:24 2017 +1000 ++++ b/gtk/ScintillaGTK.h Sat Jul 29 11:23:49 2017 +1000 +@@ -23,6 +23,7 @@ + Window scrollbarh; + GtkAdjustment *adjustmentv; + GtkAdjustment *adjustmenth; ++ Window wSelection; + int verticalScrollBarWidth; + int horizontalScrollBarHeight; + +@@ -139,6 +140,8 @@ + static void ClipboardClearSelection(GtkClipboard* clip, void *data); + + void UnclaimSelection(GdkEventSelection *selection_event); ++ static void PrimarySelection(GtkWidget *widget, GtkSelectionData *selection_data, guint info, guint time_stamp, ScintillaGTK *sciThis); ++ static gboolean PrimaryClear(GtkWidget *widget, GdkEventSelection *event, ScintillaGTK *sciThis); + void Resize(int width, int height); + + // Callback functions |