Be careful not to try to get information from windows we don't own, or that
[u/mdw/putty] / mac / macpgen.c
index 8c6aa2a..2b1a3a7 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: macpgen.c,v 1.1 2003/02/12 23:53:15 ben Exp $ */
+/* $Id: macpgen.c,v 1.3 2003/02/16 14:27:37 ben Exp $ */
 /*
  * Copyright (c) 1999, 2003 Ben Harris
  * All rights reserved.
@@ -71,14 +71,10 @@ static void mac_event(EventRecord *);
 static void mac_contentclick(WindowPtr, EventRecord *);
 static void mac_growwindow(WindowPtr, EventRecord *);
 static void mac_activatewindow(WindowPtr, EventRecord *);
-static void mac_activateabout(WindowPtr, EventRecord *);
 static void mac_updatewindow(WindowPtr);
-static void mac_updatelicence(WindowPtr);
 static void mac_keypress(EventRecord *);
 static int mac_windowtype(WindowPtr);
 static void mac_menucommand(long);
-static void mac_openabout(void);
-static void mac_openlicence(void);
 static void mac_adjustcursor(RgnHandle);
 static void mac_adjustmenus(void);
 static void mac_closewindow(WindowPtr);
@@ -126,7 +122,7 @@ static void mac_startup(void) {
     /* Get base system version (only used if there's no better selector) */
     if (Gestalt(gestaltSystemVersion, &mac_gestalts.sysvers) != noErr ||
        (mac_gestalts.sysvers &= 0xffff) < 0x700)
-       fatalbox("PuTTY requires System 7 or newer");
+       fatalbox("PuTTYgen requires System 7 or newer");
     /* Find out if we've got Color Quickdraw */
     if (Gestalt(gestaltQuickdrawVersion, &mac_gestalts.qdvers) != noErr)
        mac_gestalts.qdvers = gestaltOriginalQD;
@@ -299,106 +295,33 @@ static void mac_event(EventRecord *event) {
     }
 }
 
-static void mac_contentclick(WindowPtr window, EventRecord *event) {
-    short item;
-    DialogRef dialog;
+static void mac_contentclick(WindowPtr window, EventRecord *event)
+{
 
-    switch (mac_windowtype(window)) {
-      case wAbout:
-       dialog = GetDialogFromWindow(window);
-       if (DialogSelect(event, &dialog, &item))
-           switch (item) {
-             case wiAboutLicence:
-               mac_openlicence();
-               break;
-           }
-       break;
-    }
+    if (mac_wininfo(window)->click != NULL)
+       (*mac_wininfo(window)->click)(window, event);
 }
 
-static void mac_growwindow(WindowPtr window, EventRecord *event) {
+static void mac_growwindow(WindowPtr window, EventRecord *event)
+{
 
-    switch (mac_windowtype(window)) {
-    }
+    if (mac_wininfo(window)->grow != NULL)
+       (*mac_wininfo(window)->grow)(window, event);
 }
 
-static void mac_activatewindow(WindowPtr window, EventRecord *event) {
-    int active;
+static void mac_activatewindow(WindowPtr window, EventRecord *event)
+{
 
-    active = (event->modifiers & activeFlag) != 0;
     mac_adjustmenus();
-    switch (mac_windowtype(window)) {
-      case wAbout:
-       mac_activateabout(window, event);
-       break;
-    }
-}
-
-static void mac_activateabout(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, wiAboutLicence, &itemtype, &itemhandle, &itemrect);
-    HiliteControl((ControlHandle)itemhandle, active ? 0 : 255);
-    DialogSelect(event, &dialog, &item);
+    if (mac_wininfo(window)->activate != NULL)
+       (*mac_wininfo(window)->activate)(window, event);
 }
 
 static void mac_updatewindow(WindowPtr window)
 {
-#if TARGET_API_MAC_CARBON
-    RgnHandle rgn;
-#endif
 
-    switch (mac_windowtype(window)) {
-      case wAbout:
-       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);
-       break;
-      case wLicence:
-       mac_updatelicence(window);
-       break;
-    }
-}
-
-static void mac_updatelicence(WindowPtr window)
-{
-    Handle h;
-    int len;
-    long fondsize;
-    Rect textrect;
-
-    SetPort((GrafPtr)GetWindowPort(window));
-    BeginUpdate(window);
-    fondsize = GetScriptVariable(smRoman, smScriptSmallFondSize);
-    TextFont(HiWord(fondsize));
-    TextSize(LoWord(fondsize));
-    h = Get1Resource('TEXT', wLicence);
-    len = GetResourceSizeOnDisk(h);
-#if TARGET_API_MAC_CARBON
-    GetPortBounds(GetWindowPort(window), &textrect);
-#else
-    textrect = window->portRect;
-#endif
-    if (h != NULL) {
-       HLock(h);
-       TETextBox(*h, len, &textrect, teFlushDefault);
-       HUnlock(h);
-    }
-    EndUpdate(window);
+    if (mac_wininfo(window)->update != NULL)
+       (*mac_wininfo(window)->update)(window);
 }
 
 /*
@@ -417,7 +340,8 @@ static int mac_windowtype(WindowPtr window)
 /*
  * Handle a key press
  */
-static void mac_keypress(EventRecord *event) {
+static void mac_keypress(EventRecord *event)
+{
     WindowPtr window;
 
     window = FrontWindow();
@@ -425,12 +349,13 @@ static void mac_keypress(EventRecord *event) {
        mac_adjustmenus();
        mac_menucommand(MenuKey(event->message & charCodeMask));
     } else {
-       switch (mac_windowtype(window)) {
-       }
+       if (mac_wininfo(window)->key != NULL)
+           (*mac_wininfo(window)->key)(window, event);
     }       
 }
 
-static void mac_menucommand(long result) {
+static void mac_menucommand(long result)
+{
     short menu, item;
     WindowPtr window;
 #if !TARGET_API_MAC_CARBON
@@ -457,6 +382,9 @@ static void mac_menucommand(long result) {
         break;
       case mFile:
         switch (item) {
+         case iNew:
+           mac_newkey();
+           goto done;
           case iClose:
             mac_closewindow(window);
             goto done;
@@ -467,57 +395,15 @@ static void mac_menucommand(long result) {
         break;
     }
     /* If we get here, handling is up to window-specific code. */
-    switch (mac_windowtype(window)) {
-    }
+    if (mac_wininfo(window)->menu != NULL)
+       (*mac_wininfo(window)->menu)(window, menu, item);
+
   done:
     HiliteMenu(0);
 }
 
-static void mac_openabout(void) {
-    DialogItemType itemtype;
-    Handle item;
-    VersRecHndl vers;
-    Rect box;
-    StringPtr longvers;
-    WinInfo *wi;
-
-    if (windows.about)
-       SelectWindow(windows.about);
-    else {
-       windows.about =
-           GetDialogWindow(GetNewDialog(wAbout, NULL, (WindowPtr)-1));
-       wi = smalloc(sizeof(*wi));
-       wi->s = NULL;
-       wi->wtype = wAbout;
-       SetWRefCon(windows.about, (long)wi);
-       vers = (VersRecHndl)Get1Resource('vers', 1);
-       if (vers != NULL && *vers != NULL) {
-           longvers = (*vers)->shortVersion + (*vers)->shortVersion[0] + 1;
-           GetDialogItem(GetDialogFromWindow(windows.about), wiAboutVersion,
-                         &itemtype, &item, &box);
-           assert(itemtype & kStaticTextDialogItem);
-           SetDialogItemText(item, longvers);
-       }
-       ShowWindow(windows.about);
-    }
-}
-
-static void mac_openlicence(void) {
-    WinInfo *wi;
-
-    if (windows.licence)
-       SelectWindow(windows.licence);
-    else {
-       windows.licence = GetNewWindow(wLicence, NULL, (WindowPtr)-1);
-       wi = smalloc(sizeof(*wi));
-       wi->s = NULL;
-       wi->wtype = wLicence;
-       SetWRefCon(windows.licence, (long)wi);
-       ShowWindow(windows.licence);
-    }
-}
-
-static void mac_closewindow(WindowPtr window) {
+static void mac_closewindow(WindowPtr window)
+{
 
     switch (mac_windowtype(window)) {
 #if !TARGET_API_MAC_CARBON
@@ -525,14 +411,9 @@ static void mac_closewindow(WindowPtr window) {
        CloseDeskAcc(GetWindowKind(window));
        break;
 #endif
-      case wAbout:
-       windows.about = NULL;
-       DisposeDialog(GetDialogFromWindow(window));
-       break;
-      case wLicence:
-       windows.licence = NULL;
-       DisposeWindow(window);
-       break;
+      default:
+       if (mac_wininfo(window)->close != NULL)
+           (*mac_wininfo(window)->close)(window);
     }
 }
 
@@ -566,15 +447,15 @@ static void mac_adjustmenus(void) {
        DisableItem(menu, iClose);
     EnableItem(menu, iQuit);
 
-    switch (mac_windowtype(window)) {
-      default:
+    if (mac_wininfo(window)->adjustmenus != NULL)
+       (*mac_wininfo(window)->adjustmenus)(window);
+    else {
        DisableItem(menu, iSave);
        DisableItem(menu, iSaveAs);
        menu = GetMenuHandle(mEdit);
        DisableItem(menu, 0);
        menu = GetMenuHandle(mWindow);
        DisableItem(menu, 0); /* Until we get more than 1 item on it. */
-       break;
     }
     DrawMenuBar();
 }
@@ -582,7 +463,8 @@ static void mac_adjustmenus(void) {
 /*
  * Make sure the right cursor's being displayed.
  */
-static void mac_adjustcursor(RgnHandle cursrgn) {
+static void mac_adjustcursor(RgnHandle cursrgn)
+{
     Point mouse;
     WindowPtr window, front;
     short part;
@@ -615,8 +497,9 @@ static void mac_adjustcursor(RgnHandle cursrgn) {
 #endif
        }
     } else {
-       switch (mac_windowtype(window)) {
-         default:
+       if (mac_wininfo(window)->adjustcursor != NULL)
+           (*mac_wininfo(window)->adjustcursor)(window, mouse, cursrgn);
+       else {
 #if TARGET_API_MAC_CARBON
            GetQDGlobalsArrow(&arrow);
            SetCursor(&arrow);
@@ -625,7 +508,6 @@ static void mac_adjustcursor(RgnHandle cursrgn) {
            SetCursor(&qd.arrow);
            CopyRgn(window->visRgn, cursrgn);
 #endif
-           break;
        }
     }
 }