Drawing Native OSX Windows with D

Jacob Carlborg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Nov 29 02:09:10 PST 2015


On 2015-11-29 03:30, Mike McKee wrote:

> I'm coding an antivirus application for the Mac, using a third-party
> antivirus engine, in Qt/C++. It needs some things to run under high
> privileges. As far as I know, you can't do that with a DMG package, but
> can do it with a PKG package.

You can do that from inside your application. For example, Xcode has a 
separate preference pane to download the iOS simulator of various 
versions, same thing for the documentation.

TextMate and GitX has a menu that allow you to install the command line 
tools for the application.

> I've learned a tremendous amount about PKG packages (the docs are
> difficult), but the one thing that doesn't seem possible is to download
> a component from a remote URL with it except via a Perl or Bash script.
> The PKG flat format supports a way to call a preinstall and postinstall
> Perl or Bash script. The trouble with that technique, however, is that
> if you have a 30MB download that takes awhile, the installer screen sits
> at "Running Package Scripts..." for like 3 minutes (on 2Mbps DSL) and
> this can confuse the consumer into thinking the installer is hung up,
> when it isn't.

Why can't you bundle everything in the PKG package? What's the advantage 
of first downloading a small binary/package which then downloads the 
real application?

> The thing I'd like to achieve with D is to have my Bash or Perl script
> call a command line D application that finds the current installer
> window x,y, hides the Cocoa-based window, draws my new Cocoa-based
> window to replace it at the same x,y,w,h as the other one, and then runs
> curl command to download the file, then uses the D application again to
> stop showing my custom window, unhide the installer window, and exit the
> Bash script.

If you really go that route (still don't see why this would be 
necessary) I guess DerelictCocoa is the way to go [1], or even better 
use the new Objective-C support that D got in the latest version of DMD [2].

> So, some things I need to learn in D:
>
> * How to enumerate the currently visible Cocoa windows and their titles
> or internal names, along with their window handle.
>
> * How to get the x,y of an existing Cocoa window by its window handle.
>
> * How to hide a Cocoa window by its window handle.
>
> * How to draw my own Cocoa window at an x,y coordinate.
>
> * How to destroy my Cocoa window by its window handle.
>
> * How to unhide a previously hidden Cocoa window by its window handle.

These are not specific for D. You can search for how to do this in 
Objective-C/Swift and then figure out how to translate the code to D.

[1] https://github.com/p0nce/DerelictCocoa/tree/master/examples/window
[2] http://dlang.org/spec/objc_interface.html

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list