1/* 2 * Copyright 2015 Haiku, Inc. All rights reserved 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * John Scipione, jscipione@gmail.com 7 */ 8 9 10#include "MinimizeAllInputFilter.h" 11 12#include <string.h> 13 14#include <new> 15 16#include <InterfaceDefs.h> 17#include <Message.h> 18#include <OS.h> 19#include <Roster.h> 20#include <WindowInfo.h> 21 22#include <tracker_private.h> 23 24 25#define _MINIMIZE_ALL_ '_WMA' 26 27 28extern "C" BInputServerFilter* instantiate_input_filter() { 29 return new(std::nothrow) MinimizeAllInputFilter(); 30} 31 32 33MinimizeAllInputFilter::MinimizeAllInputFilter() 34{ 35} 36 37 38filter_result 39MinimizeAllInputFilter::Filter(BMessage* message, BList* _list) 40{ 41 switch (message->what) { 42 case B_KEY_DOWN: 43 { 44 const char* bytes; 45 if (message->FindString("bytes", &bytes) != B_OK) 46 break; 47 48 int32 modifiers; 49 if (message->FindInt32("modifiers", &modifiers) != B_OK) 50 break; 51 52 int32 modifiersHeld = modifiers & (B_COMMAND_KEY 53 | B_CONTROL_KEY | B_OPTION_KEY | B_MENU_KEY | B_SHIFT_KEY); 54 55 bool minimize; 56 if (modifiersHeld == (B_COMMAND_KEY | B_CONTROL_KEY)) 57 minimize = true; 58 else if (modifiersHeld 59 == (B_COMMAND_KEY | B_CONTROL_KEY | B_SHIFT_KEY)) { 60 minimize = false; 61 } else 62 break; 63 64 int32 cookie = 0; 65 team_info teamInfo; 66 while (get_next_team_info(&cookie, &teamInfo) == B_OK) { 67 app_info appInfo; 68 be_roster->GetRunningAppInfo(teamInfo.team, &appInfo); 69 team_id team = appInfo.team; 70 be_roster->ActivateApp(team); 71 72 if (be_roster->GetActiveAppInfo(&appInfo) == B_OK 73 && (appInfo.flags & B_BACKGROUND_APP) == 0 74 && strcasecmp(appInfo.signature, kDeskbarSignature) != 0) { 75 BRect zoomRect; 76 if (minimize) 77 do_minimize_team(zoomRect, team, false); 78 else 79 do_bring_to_front_team(zoomRect, team, false); 80 } 81 } 82 83 return B_SKIP_MESSAGE; 84 } 85 } 86 87 return B_DISPATCH_MESSAGE; 88} 89 90 91status_t 92MinimizeAllInputFilter::InitCheck() 93{ 94 return B_OK; 95} 96