152 lines
4.5 KiB
C++
152 lines
4.5 KiB
C++
/*
|
|
* Copyright 2010, Haiku.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Clemens Zeidler <haiku@clemens-zeidler.de>
|
|
*/
|
|
#ifndef DESKTOP_LISTENER_H
|
|
#define DESKTOP_LISTENER_H
|
|
|
|
|
|
#include <util/DoublyLinkedList.h>
|
|
|
|
#include <Point.h>
|
|
|
|
#include <ServerLink.h>
|
|
#include "Window.h"
|
|
|
|
|
|
class BMessage;
|
|
class Desktop;
|
|
class Window;
|
|
|
|
|
|
class DesktopListener : public DoublyLinkedListLinkImpl<DesktopListener> {
|
|
public:
|
|
virtual ~DesktopListener();
|
|
|
|
virtual int32 Identifier() = 0;
|
|
|
|
virtual void ListenerRegistered(Desktop* desktop) = 0;
|
|
virtual void ListenerUnregistered() = 0;
|
|
|
|
virtual bool HandleMessage(Window* sender,
|
|
BPrivate::LinkReceiver& link,
|
|
BPrivate::LinkSender& reply) = 0;
|
|
|
|
virtual void WindowAdded(Window* window) = 0;
|
|
virtual void WindowRemoved(Window* window) = 0;
|
|
|
|
virtual bool KeyPressed(uint32 what, int32 key,
|
|
int32 modifiers) = 0;
|
|
virtual void MouseEvent(BMessage* message) = 0;
|
|
virtual void MouseDown(Window* window, BMessage* message,
|
|
const BPoint& where) = 0;
|
|
virtual void MouseUp(Window* window, BMessage* message,
|
|
const BPoint& where) = 0;
|
|
virtual void MouseMoved(Window* window, BMessage* message,
|
|
const BPoint& where) = 0;
|
|
|
|
virtual void WindowMoved(Window* window) = 0;
|
|
virtual void WindowResized(Window* window) = 0;
|
|
virtual void WindowActivated(Window* window) = 0;
|
|
virtual void WindowSentBehind(Window* window,
|
|
Window* behindOf) = 0;
|
|
virtual void WindowWorkspacesChanged(Window* window,
|
|
uint32 workspaces) = 0;
|
|
virtual void WindowHidden(Window* window,
|
|
bool fromMinimize) = 0;
|
|
virtual void WindowMinimized(Window* window,
|
|
bool minimize) = 0;
|
|
|
|
virtual void WindowTabLocationChanged(Window* window,
|
|
float location, bool isShifting) = 0;
|
|
virtual void SizeLimitsChanged(Window* window,
|
|
int32 minWidth, int32 maxWidth,
|
|
int32 minHeight, int32 maxHeight) = 0;
|
|
virtual void WindowLookChanged(Window* window,
|
|
window_look look) = 0;
|
|
virtual void WindowFeelChanged(Window* window,
|
|
window_feel feel) = 0;
|
|
|
|
virtual bool SetDecoratorSettings(Window* window,
|
|
const BMessage& settings) = 0;
|
|
virtual void GetDecoratorSettings(Window* window,
|
|
BMessage& settings) = 0;
|
|
};
|
|
|
|
|
|
typedef DoublyLinkedList<DesktopListener> DesktopListenerDLList;
|
|
|
|
|
|
class DesktopObservable {
|
|
public:
|
|
DesktopObservable();
|
|
|
|
void RegisterListener(DesktopListener* listener,
|
|
Desktop* desktop);
|
|
void UnregisterListener(DesktopListener* listener);
|
|
const DesktopListenerDLList& GetDesktopListenerList();
|
|
|
|
bool MessageForListener(Window* sender,
|
|
BPrivate::LinkReceiver& link,
|
|
BPrivate::LinkSender& reply);
|
|
|
|
void NotifyWindowAdded(Window* window);
|
|
void NotifyWindowRemoved(Window* window);
|
|
|
|
bool NotifyKeyPressed(uint32 what, int32 key,
|
|
int32 modifiers);
|
|
void NotifyMouseEvent(BMessage* message);
|
|
void NotifyMouseDown(Window* window,
|
|
BMessage* message, const BPoint& where);
|
|
void NotifyMouseUp(Window* window, BMessage* message,
|
|
const BPoint& where);
|
|
void NotifyMouseMoved(Window* window,
|
|
BMessage* message, const BPoint& where);
|
|
|
|
void NotifyWindowMoved(Window* window);
|
|
void NotifyWindowResized(Window* window);
|
|
void NotifyWindowActivated(Window* window);
|
|
void NotifyWindowSentBehind(Window* window,
|
|
Window* behindOf);
|
|
void NotifyWindowWorkspacesChanged(Window* window,
|
|
uint32 workspaces);
|
|
void NotifyWindowHidden(Window* window,
|
|
bool fromMinimize);
|
|
void NotifyWindowMinimized(Window* window,
|
|
bool minimize);
|
|
|
|
void NotifyWindowTabLocationChanged(Window* window,
|
|
float location, bool isShifting);
|
|
void NotifySizeLimitsChanged(Window* window,
|
|
int32 minWidth, int32 maxWidth,
|
|
int32 minHeight, int32 maxHeight);
|
|
void NotifyWindowLookChanged(Window* window,
|
|
window_look look);
|
|
void NotifyWindowFeelChanged(Window* window,
|
|
window_feel feel);
|
|
|
|
bool SetDecoratorSettings(Window* window,
|
|
const BMessage& settings);
|
|
void GetDecoratorSettings(Window* window,
|
|
BMessage& settings);
|
|
|
|
private:
|
|
class InvokeGuard {
|
|
public:
|
|
InvokeGuard(bool& invoking);
|
|
~InvokeGuard();
|
|
private:
|
|
bool& fInvoking;
|
|
};
|
|
|
|
DesktopListenerDLList fDesktopListenerList;
|
|
|
|
// prevent recursive invokes
|
|
bool fWeAreInvoking;
|
|
};
|
|
|
|
#endif
|