haiku/src/apps/switcher/Switcher.cpp

98 lines
1.5 KiB
C++

/*
* Copyright 2011, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#include "Switcher.h"
#include <stdlib.h>
#include <Application.h>
#include <Catalog.h>
#include "CaptureWindow.h"
#include "PanelWindow.h"
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "Switcher"
const char* kSignature = "application/x-vnd.Haiku-Switcher";
Switcher::Switcher()
:
BApplication(kSignature),
fOccupiedLocations(0)
{
}
Switcher::~Switcher()
{
}
void
Switcher::ReadyToRun()
{
CaptureWindow* window = new CaptureWindow();
window->Run();
fCaptureMessenger = window;
}
void
Switcher::MessageReceived(BMessage* message)
{
switch (message->what) {
case kMsgLocationTrigger:
{
uint32 location = (uint32)message->FindInt32("location");
if ((location & fOccupiedLocations) == 0) {
// TODO: make function configurable
uint32 which = kShowApplicationWindows;
if ((location & (kTopEdge | kBottomEdge)) != 0)
which = kShowApplications;
new PanelWindow(location, which,
(team_id)message->FindInt32("team"));
fOccupiedLocations |= location;
}
break;
}
case kMsgLocationFree:
{
uint32 location;
if (message->FindInt32("location", (int32*)&location) == B_OK)
fOccupiedLocations &= ~location;
break;
}
case kMsgHideWhenMouseMovedOut:
fCaptureMessenger.SendMessage(message);
break;
default:
BApplication::MessageReceived(message);
break;
}
}
// #pragma mark -
int
main(int /*argc*/, char** /*argv*/)
{
Switcher app;
app.Run();
return 0;
}