aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6364_383b9c10d569.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/scintilla_backports/6364_383b9c10d569.patch')
-rw-r--r--src/scintilla_backports/6364_383b9c10d569.patch131
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