/* * Copyright (c) 1998-2007 Matthijs Hollemans * All rights reserved. Distributed under the terms of the MIT License. */ #include "GrepApp.h" #include #include #include "GlobalDefs.h" #include "GrepWindow.h" #include "Model.h" GrepApp::GrepApp() : BApplication(APP_SIGNATURE), fGotArgvOnStartup(false), fGotRefsOnStartup(false), fQuitter(NULL) { } GrepApp::~GrepApp() { delete fQuitter; } void GrepApp::ArgvReceived(int32 argc, char** argv) { fGotArgvOnStartup = true; BMessage message(B_REFS_RECEIVED); int32 refCount = 0; for (int32 i = 1; i < argc; i++) { BEntry entry(argv[i]); entry_ref ref; entry.GetRef(&ref); if (entry.Exists()) { message.AddRef("refs", &ref); refCount += 1; } else printf("%s: File not found: %s\n", argv[0], argv[i]); } if (refCount > 0) RefsReceived(&message); } void GrepApp::RefsReceived(BMessage* message) { if (IsLaunching()) fGotRefsOnStartup = true; new GrepWindow(message); } void GrepApp::ReadyToRun() { if (!fGotArgvOnStartup && !fGotRefsOnStartup) _NewUnfocusedGrepWindow(); // TODO: stippi: I don't understand what this is supposed to do: if (fGotArgvOnStartup && !fGotRefsOnStartup) PostMessage(B_QUIT_REQUESTED); } void GrepApp::MessageReceived(BMessage* message) { switch (message->what) { case B_SILENT_RELAUNCH: _NewUnfocusedGrepWindow(); break; case MSG_TRY_QUIT: _TryQuit(); break; default: BApplication::MessageReceived(message); break; } } void GrepApp::_TryQuit() { if (CountWindows() == 0) PostMessage(B_QUIT_REQUESTED); if (CountWindows() == 1 && fQuitter == NULL) { fQuitter = new BMessageRunner(be_app_messenger, new BMessage(MSG_TRY_QUIT), 200000, -1); } } void GrepApp::_NewUnfocusedGrepWindow() { BMessage emptyMessage; new GrepWindow(&emptyMessage); }