diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Gtk/State.dcl | 2 | ||||
| -rw-r--r-- | src/Gtk/Widgets/Sheet/Signal.icl | 20 | 
2 files changed, 14 insertions, 8 deletions
| diff --git a/src/Gtk/State.dcl b/src/Gtk/State.dcl index cbc86c1..7e56fcf 100644 --- a/src/Gtk/State.dcl +++ b/src/Gtk/State.dcl @@ -15,7 +15,7 @@ from Gtk.Signal import :: SignalHandlerInternal  	, return          :: !Bool  	, signal_handlers :: !Map Int SignalHandlerInternal  	, signal_counter  :: !Int -	, shares          :: !Map ShareId Dynamic +	, shares          :: !Map ShareId Dynamic // TODO: make this map strict to be able to free references in it  	}  :: GtkM a =: GtkM (GtkState -> (a, GtkState)) 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) | 
