summaryrefslogtreecommitdiff
path: root/src/Gtk/Widgets/Sheet/Signal.icl
diff options
context:
space:
mode:
authorCamil Staps2019-10-25 20:13:34 +0200
committerCamil Staps2019-10-25 20:13:34 +0200
commit4b0b45283080cf5d48794039a673247e69bb7867 (patch)
treeec53c918b30cf91161d6bf6bb53327c37c93d0f2 /src/Gtk/Widgets/Sheet/Signal.icl
parentAdd G modifier to ccalls that may trigger GTK signals (which may cause re-ent... (diff)
Catch traverse event to (-1,0) which seems to be a bug in GtkSheet
Diffstat (limited to 'src/Gtk/Widgets/Sheet/Signal.icl')
-rw-r--r--src/Gtk/Widgets/Sheet/Signal.icl20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/Gtk/Widgets/Sheet/Signal.icl b/src/Gtk/Widgets/Sheet/Signal.icl
index adc6054..6db3b6b 100644
--- a/src/Gtk/Widgets/Sheet/Signal.icl
+++ b/src/Gtk/Widgets/Sheet/Signal.icl
@@ -18,10 +18,16 @@ where
EnterPressedHandler f -> SHI_Pointer_Bool \_ -> not <$> f
TraverseHandler f -> SHI_Int_Int_Pointer_Pointer_Bool \oldrow oldcol newrowp newcolp ->
let newrow = readInt4S newrowp 0; newcol = readInt4S newcolp 0 in
- f (if (oldrow<0) Nothing (Just (oldrow,oldcol))) (newrow,newcol) >>= \r -> case r of
- Nothing ->
- pure False
- Just (row,col) ->
- appWorld (forceEval (writeInt4 newrowp 0 row)) >>|
- appWorld (forceEval (writeInt4 newcolp 0 col)) >>|
- pure True
+ // NB, possible bug in GtkSheet: when a cell is selected and the
+ // user then presses enter, this emits a traverse signal with new
+ // location (-1,0), and selects the entire first column. This seems
+ // undesirable, so we prevent it.
+ if (newrow < 0 || newcol < 0)
+ (pure False)
+ (f (if (oldrow<0) Nothing (Just (oldrow,oldcol))) (newrow,newcol) >>= \r -> case r of
+ Nothing ->
+ pure False
+ Just (row,col) ->
+ appWorld (forceEval (writeInt4 newrowp 0 row)) >>|
+ appWorld (forceEval (writeInt4 newcolp 0 col)) >>|
+ pure True)