Re: perltray/tk intercept windows minimize function

Rob Seegel <[email protected]>
Newsgroups gmane.comp.lang.perl.tk
Message-ID <[email protected]>
I have to admit that I haven't been following this thread as closely as 
I should, but I do agree that breaking or putting a new and unexpected 
behavior on the minimize button is *not* a Good Thing. That's why I 
think it's better to remove it if you don't want the default behavior.

I'd also like to add that Nick added a nice tidbit that I wasn't aware 
of, and it's to your advantage to use it. I believe it adds value to the 
solution I posted. The modified code might look like this:

use Tk;
use Win32::GUI;

my $mw = MainWindow->new;

my $winH = hex($mw->frame);
my $style = Win32::GUI::GetWindowLong($winH, -16);
$style &= ~(WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
Win32::GUI::SetWindowLong($winH, -16, $style);
Win32::GUI::DrawMenuBar($winH);

MainLoop;

With this addition, you may only save one line of code which you may end 
up using anyway (to give the MainWindow a title), but it's less error 
prone and cleaner IMO to directly use the HWND if it's available rather 
than search for it as I did. This is what Nick was saying in his 
response to my response. It's what I would have used originally if I'd 
known about it.

Unfortunately, I do not have Win32Util installed on my Win32 version of 
Perl so I can't help you with your other problem, have you attempted to 
call maximize *before* removing the minimize button rather than after?

Rob

listmail wrote:
> Thanks for the response.  I found a similar response to yours 
> addressed to me from someone on the
> ptk list while viewing the codecomments archives. Looks like I haven't 
> been getting the ptk emails
> for who knows how long. Hopefully I can get that fixed soon.  I liked 
> Rob's solution by removing
> the buttons, this seemed cleaner and easier to support after 
> implementing it.
>
>
>
> Nick Ing-Simmons wrote:
>> Listmail <[email protected]> writes:
>>  
>>> I'm not sure what that last bit is all about :), but the user uses 
>>> the application like a vast majority of other applications coded to 
>>> run in the system tray by interacting with the system tray icon as 
>>> opposed to a task bar button. Typically, double clicking the system 
>>> tray icon redraws the application right where it left off or right 
>>> clicking the system tray  icon can provide the user with a menu with 
>>> that contains that same "redraw" option as well a few others like 
>>> "hide" and "exit" (as shown below).   Most "system tray" 
>>> applications that I know of  create a  "minimize to the system tray" 
>>> effect instead of remaining a task bar button.     
>>
>> Okay, I can see why you want to do what you suggest then.
>> And you DO want to minimize the application so you are not breaking 
>> the user's mental model of what s/he is asking machine to do. Fine.
>>
>> But as you are minimizing ... widget is not going to be destroyed but 
>> just hidden.
>>
>> First an aside:
>> [On X what happens is that when user clicks on minimize button window 
>> manager withdraws the main window and that sends an event to the 
>> application.
>> Window manager may then display an icon on the desktop or in a tray.
>> Application can however withdraw the _icon_ (which is just another 
>> window).
>> So on X you don't override minimize but instead bind to the 
>> visibility event(s) on the application window and the icon window
>> ]
>>
>> Meanwhile back in wonderful world of Windows there is no doubt a 
>> whole other mechanism which presumably allows same effects.
>>
>> How Windows part of core-tk maps windows events to X-like ones is 
>> sometimes a little strange but it does try.
>> (Tcl/Tk started on X and still retains an X-like view of the world.)
>> So it is possible that you can get what you want by
>> a bind :
>>
>>   $toplevel->bind('<Unmap>',YourCallback);
>>
>> <Unmap> may not be the right event, but is what X would do.
>>
>> See if that gives you the hook to cache the minimize. Then I think if 
>> you withdraw the window the task-bar icon will go too.
>>
>> If that doesn't work then you probably need a new "window class" 
>> registered
>> which is easy to do in a C/C++ application but I have never set 
>> anything up
>> to do it from perl.
>>
>>
>>
>>
>>
>> -++**==--++**==--++**==--++**==--++**==--++**==--++**==
>> This message was posted through the Stanford campus mailing list
>> server.  If you wish to unsubscribe from this mailing list, send the
>> message body of "unsubscribe ptk" to [email protected]
>>
>>   
>
> -++**==--++**==--++**==--++**==--++**==--++**==--++**==
> This message was posted through the Stanford campus mailing list
> server.  If you wish to unsubscribe from this mailing list, send the
> message body of "unsubscribe ptk" to [email protected]
>
>


-++**==--++**==--++**==--++**==--++**==--++**==--++**==
This message was posted through the Stanford campus mailing list
server.  If you wish to unsubscribe from this mailing list, send the
message body of "unsubscribe ptk" to [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.