Hello menu controllers,

thanks for the hints. I found a solution now to disable
the MacPerl menus at runtime.

Your menu id checker doesn't give me the needed results though:

>use Mac::Menus;
>
> $~="OUT1";
> for $id (128..66000) {
>     $menuHandle = GetMenuHandle($id);
>     if($menuHandle) {
>       # $menu = GetMenuBar();
>       $flags = $menuHandle->enableFlags;
>       $data  = $menuHandle->menuData;
>       write;
>     }
> }
> $~="STDOUT";
>
>
>format OUT1 =
>  @>>>> = @<<<<<<<<< @<<<<<<<<
>  $id, $data, $flags
>.
>__END__

results in:
    128 =            -5
    129 = File       22263
    130 = Edit       44793
    131 = Window     -1
    133 = BBEdit     23
    201 =            -1
    202 =            -1
    203 =            -1
    204 =            -1
    205 =            -1
    206 =            -1
    207 =            -1
    208 =            -1
  45346 =            -1
  45537 =   ".0      -4385
  49046 = Hilfe      -65
  49047 =   …÷,      -9
  49056 =   ´†       524287
  65664 =            -5
  65665 = File       22263
  65666 = Edit       44793
  65667 = Window     -1
  65669 = BBEdit     23
  65737 =            -1
  65738 =            -1
  65739 =            -1
  65740 =            -1
  65741 =            -1
  65742 =            -1
  65743 =            -1
  65744 =            -1

Menu id 132 for "Script" is missing. I can only guess why (Mercution?).

The following code (thanks Thomas) does what I originally wanted:

use Mac::Menus;
use Mac::Events;

@macperl_menus = (
        128,    # Apple
        129,    # File
        130,    # Edit
        131,    # Window
        132,    # Script
        133,    # Editor
);

print "disabling ...\n";
for ( @macperl_menus ) {
        my $menu = GetMenuHandle $_;
        if( $menu ) { DisableItem $menu; DisableItem $menu, 0; }
}
DrawMenuBar;

pause( 10 );

print "enabling ...\n";

for ( @macperl_menus ) {
        my $menu = GetMenuHandle $_;
        if( $menu ) { EnableItem $menu; EnableItem $menu, 0; }
}
DrawMenuBar;

print "done.\n";

exit;

sub pause {
  my ($time) = @_;
  my $start = time;
  WaitNextEvent until time > ($start + $time);
}

__END__

Deleting with DeleteMenu $id works fine too.
Just in case - how could I easily restore it?


Regards,
Axel.


Reply via email to