Bring PuTTYgen into the world of object-oriented event handling.
[u/mdw/putty] / mac / macpgkey.c
index 9558fd7..c65d939 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macpgkey.c,v 1.1 2003/02/16 13:03:12 ben Exp $ */
+/* $Id: macpgkey.c,v 1.2 2003/02/16 14:27:37 ben Exp $ */
 /*
  * Copyright (c) 2003 Ben Harris
  * All rights reserved.
 #include "mac.h"
 #include "macpgrid.h"
 
+static void mac_clickkey(WindowPtr window, EventRecord *event)
+{
+    short item;
+    DialogRef dialog;
+
+    dialog = GetDialogFromWindow(window);
+    if (DialogSelect(event, &dialog, &item))
+       switch (item) {
+         case wiKeyGenerate:
+           /* Do something */
+           break;
+       }
+}
+
+static void mac_activatekey(WindowPtr window, EventRecord *event)
+{
+    DialogRef dialog;
+    DialogItemType itemtype;
+    Handle itemhandle;
+    short item;
+    Rect itemrect;
+    int active;
+
+    dialog = GetDialogFromWindow(window);
+    active = (event->modifiers & activeFlag) != 0;
+    GetDialogItem(dialog, wiKeyGenerate, &itemtype, &itemhandle, &itemrect);
+    HiliteControl((ControlHandle)itemhandle, active ? 0 : 255);
+    DialogSelect(event, &dialog, &item);
+}
+
+static void mac_updatekey(WindowPtr window)
+{
+#if TARGET_API_MAC_CARBON
+    RgnHandle rgn;
+#endif
+
+    BeginUpdate(window);
+#if TARGET_API_MAC_CARBON
+    rgn = NewRgn();
+    GetPortVisibleRegion(GetWindowPort(window), rgn);
+    UpdateDialog(GetDialogFromWindow(window), rgn);
+    DisposeRgn(rgn);
+#else
+    UpdateDialog(window, window->visRgn);
+#endif
+    EndUpdate(window);
+}
+
 void mac_newkey(void)
 {
     KeyState *ks;
@@ -46,8 +94,11 @@ void mac_newkey(void)
     memset(wi, 0, sizeof(*wi));
     wi->ks = ks;
     wi->wtype = wKey;
-    SetWRefCon(ks->box, (long)wi);
-    ShowWindow(ks->box);
+    wi->update = &mac_updatekey;
+    wi->click = &mac_clickkey;
+    wi->activate = &mac_activatekey;
+    SetWRefCon(GetDialogWindow(ks->box), (long)wi);
+    ShowWindow(GetDialogWindow(ks->box));
 }
 
 /*