ui/cocoa/toolkit.m

changeset 49
a80ba8741be6
parent 48
0b8ac9d6d473
--- a/ui/cocoa/toolkit.m	Mon May 19 21:15:43 2014 +0200
+++ b/ui/cocoa/toolkit.m	Tue May 20 13:29:53 2014 +0200
@@ -238,8 +238,7 @@
 
 - (BOOL)handleStateEvent:(id)sender {
     NSWindow *activeWindow = [NSApp keyWindow];
-    NSMenuItem *item = (NSMenuItem*)sender;
-    int state = [item state] ? NSOffState : NSOnState;
+    int state = [sender state] ? NSOffState : NSOnState;
     
     UiEvent event;
     event.intval = state;
@@ -248,9 +247,13 @@
         event.obj = [(UiCocoaWindow*)activeWindow object];
         event.window = event.obj->window;
         event.document = event.obj->ctx->document;
-        // update state in window data
+        // if the sender is a menu item, we have to save the state for this
+        // window
         UiMenuItem *wmi = [(UiCocoaWindow*)activeWindow getMenuItem: sender];
-        wmi->state = state;
+        if(wmi) {
+            // update state in window data
+            wmi->state = state;
+        }
     } else {
         event.window = NULL;
         event.document = NULL;
@@ -258,7 +261,28 @@
     if(callback) {
         callback(&event, data);
     }
-    [item setState: state];
+    [sender setState: state];
+    
+    return true;
+}
+
+- (BOOL)handleToggleEvent:(id)sender {
+    NSWindow *activeWindow = [NSApp keyWindow];
+    
+    UiEvent event;
+    event.intval = [sender state];
+    event.eventdata = NULL;
+    if([activeWindow class] == [UiCocoaWindow class]) {
+        event.obj = [(UiCocoaWindow*)activeWindow object];
+        event.window = event.obj->window;
+        event.document = event.obj->ctx->document;
+    } else {
+        event.window = NULL;
+        event.document = NULL;
+    }
+    if(callback) {
+        callback(&event, data);
+    }
     
     return true;
 }

mercurial