summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Gtk/Signal.dcl1
-rw-r--r--src/Gtk/Signal.icl7
-rw-r--r--src/Gtk/Widgets/Sheet/Signal.dcl3
-rw-r--r--src/Gtk/Widgets/Sheet/Signal.icl2
-rw-r--r--src/clean_gtk_support.c14
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;