aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gtk/ScintillaGTK.cxx19
1 files changed, 14 insertions, 5 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx
index 74879beda..d883abdd1 100644
--- a/gtk/ScintillaGTK.cxx
+++ b/gtk/ScintillaGTK.cxx
@@ -122,7 +122,7 @@ class ScintillaGTK : public ScintillaBase {
SelectionText primary;
- GdkEventButton evbtn;
+ GdkEventButton *evbtn;
bool capturedMouse;
bool dragWasDropped;
int lastKey;
@@ -354,7 +354,7 @@ static ScintillaGTK *ScintillaFromWidget(GtkWidget *widget) {
ScintillaGTK::ScintillaGTK(_ScintillaObject *sci_) :
adjustmentv(0), adjustmenth(0),
scrollBarWidth(30), scrollBarHeight(30),
- capturedMouse(false), dragWasDropped(false),
+ evbtn(0), capturedMouse(false), dragWasDropped(false),
lastKey(0), rectangularSelectionModifier(SCMOD_CTRL), parentClass(0),
im_context(NULL),
lastWheelMouseDirection(0),
@@ -392,6 +392,10 @@ ScintillaGTK::ScintillaGTK(_ScintillaObject *sci_) :
ScintillaGTK::~ScintillaGTK() {
g_idle_remove_by_data(this);
+ if (evbtn) {
+ gdk_event_free(reinterpret_cast<GdkEvent *>(evbtn));
+ evbtn = 0;
+ }
}
static void UnRefCursor(GdkCursor *cursor) {
@@ -824,14 +828,15 @@ bool ScintillaGTK::DragThreshold(Point ptStart, Point ptNow) {
}
void ScintillaGTK::StartDrag() {
+ PLATFORM_ASSERT(evbtn != 0);
dragWasDropped = false;
inDragDrop = ddDragging;
GtkTargetList *tl = gtk_target_list_new(clipboardCopyTargets, nClipboardCopyTargets);
gtk_drag_begin(GTK_WIDGET(PWidget(wMain)),
tl,
static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE),
- evbtn.button,
- reinterpret_cast<GdkEvent *>(&evbtn));
+ evbtn->button,
+ reinterpret_cast<GdkEvent *>(evbtn));
}
static std::string ConvertText(char *s, size_t len, const char *charSetDest,
@@ -1761,7 +1766,11 @@ gint ScintillaGTK::PressThis(GdkEventButton *event) {
if (event->type != GDK_BUTTON_PRESS)
return FALSE;
- evbtn = *event;
+ if (evbtn) {
+ gdk_event_free(reinterpret_cast<GdkEvent *>(evbtn));
+ evbtn = 0;
+ }
+ evbtn = reinterpret_cast<GdkEventButton *>(gdk_event_copy(reinterpret_cast<GdkEvent *>(event)));
Point pt;
pt.x = int(event->x);
pt.y = int(event->y);