diff options
-rw-r--r-- | src/Gtk/Signal.dcl | 1 | ||||
-rw-r--r-- | src/Gtk/Signal.icl | 7 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet/Signal.dcl | 3 | ||||
-rw-r--r-- | src/Gtk/Widgets/Sheet/Signal.icl | 2 | ||||
-rw-r--r-- | src/clean_gtk_support.c | 14 |
5 files changed, 22 insertions, 5 deletions
diff --git a/src/Gtk/Signal.dcl b/src/Gtk/Signal.dcl index 692bf05..b082e02 100644 --- a/src/Gtk/Signal.dcl +++ b/src/Gtk/Signal.dcl @@ -23,6 +23,7 @@ instance signalHandler GSignalHandler :: SignalHandlerInternal = SHI_Void !(GtkM ()) | SHI_Pointer_Bool !(Pointer -> GtkM Bool) + | SHI_Int_Int_Bool !(Int Int -> GtkM Bool) | SHI_Int_Int_Pointer_Pointer_Bool !(Int Int Pointer Pointer -> GtkM Bool) installSignalHandler :: !h !w -> GtkM w | signalHandler h & gtkWidget w diff --git a/src/Gtk/Signal.icl b/src/Gtk/Signal.icl index 64a244e..56126f8 100644 --- a/src/Gtk/Signal.icl +++ b/src/Gtk/Signal.icl @@ -38,8 +38,9 @@ installSignalHandler handler widget = where type handler = case handler of SHI_Void _ -> 1 - SHI_Pointer_Bool _ -> 2 - SHI_Int_Int_Pointer_Pointer_Bool _ -> 3 + SHI_Int_Int_Bool _ -> 2 + SHI_Pointer_Bool _ -> 3 + SHI_Int_Int_Pointer_Pointer_Bool _ -> 4 instance tune w SignalHandler | gtkWidget w where @@ -95,6 +96,8 @@ runSignalHandler :: !SignalHandlerInternal !{#Int} -> GtkM Int runSignalHandler handler args = case handler of SHI_Void f -> toInt <$> f + SHI_Int_Int_Bool f + -> toInt <$> f args.[0] args.[1] SHI_Pointer_Bool f -> toInt <$> f args.[0] SHI_Int_Int_Pointer_Pointer_Bool f diff --git a/src/Gtk/Widgets/Sheet/Signal.dcl b/src/Gtk/Widgets/Sheet/Signal.dcl index ad14d5a..39f77b0 100644 --- a/src/Gtk/Widgets/Sheet/Signal.dcl +++ b/src/Gtk/Widgets/Sheet/Signal.dcl @@ -6,7 +6,8 @@ from Gtk.Signal import class signalHandler, :: SignalHandlerInternal from Gtk.State import :: GtkM :: GtkSheetSignalHandler - = EnterPressedHandler !(GtkM Bool) + = DeactivateHandler !(Int Int -> GtkM Bool) + | EnterPressedHandler !(GtkM Bool) | TraverseHandler !((Maybe (Int,Int)) (Int,Int) -> GtkM (Maybe (Int, Int))) instance signalHandler GtkSheetSignalHandler diff --git a/src/Gtk/Widgets/Sheet/Signal.icl b/src/Gtk/Widgets/Sheet/Signal.icl index 6db3b6b..8cfa10f 100644 --- a/src/Gtk/Widgets/Sheet/Signal.icl +++ b/src/Gtk/Widgets/Sheet/Signal.icl @@ -12,9 +12,11 @@ import Gtk instance signalHandler GtkSheetSignalHandler where signalName handler = case handler of + DeactivateHandler _ -> "deactivate" EnterPressedHandler _ -> "enter-pressed" TraverseHandler _ -> "traverse" signalHandler handler = case handler of + DeactivateHandler f -> SHI_Int_Int_Bool f 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 diff --git a/src/clean_gtk_support.c b/src/clean_gtk_support.c index b223cb2..50f534b 100644 --- a/src/clean_gtk_support.c +++ b/src/clean_gtk_support.c @@ -18,6 +18,15 @@ static void clean_g_signal_handler_void (GtkWidget *target,gpointer data) { handleSignal ((CleanInt)data,&args[2]); } +static gboolean clean_g_signal_handler_int_int_bool + (GtkWidget *target,gint i1,gint i2,gpointer data) { + CleanInt args[4]; + args[0]=4; + args[2]=i1; + args[3]=i2; + return (gboolean) handleSignal ((CleanInt)data,&args[2]); +} + static gboolean clean_g_signal_handler_pointer_bool (GtkWidget *target,gpointer p,gpointer data) { CleanInt args[3]; args[0]=1; @@ -41,8 +50,9 @@ void clean_g_signal_connect (int type,GtkWidget *widget,char *signal,CleanInt id switch (type) { case 1: callback=&clean_g_signal_handler_void; break; - case 2: callback=&clean_g_signal_handler_pointer_bool; break; - case 3: callback=&clean_g_signal_handler_int_int_pointer_pointer_bool; break; + case 2: callback=&clean_g_signal_handler_int_int_bool; break; + case 3: callback=&clean_g_signal_handler_pointer_bool; break; + case 4: callback=&clean_g_signal_handler_int_int_pointer_pointer_bool; break; default: fprintf (stderr,"clean_g_signal_connect: illegal type %d\n",type); return; |