xref: /haiku/src/servers/app/ClickTarget.h (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef CLICK_TARGET_H
6 #define CLICK_TARGET_H
7 
8 
9 #include <TokenSpace.h>
10 
11 
12 /*!	\brief Identifies a mouse click target in the app server.
13 
14 	Used to discriminate between different targets in order to filter
15 	multi-clicks. A click on a different target resets the click count.
16 */
17 class ClickTarget {
18 public:
19 	enum Type {
20 		TYPE_INVALID,
21 		TYPE_WINDOW_CONTENTS,
22 		TYPE_WINDOW_DECORATOR
23 	};
24 
25 public:
26 	ClickTarget()
27 		:
28 		fType(TYPE_INVALID),
29 		fWindow(B_NULL_TOKEN),
30 		fWindowElement(0)
31 	{
32 	}
33 
34 	ClickTarget(Type type, int32 window, int32 windowElement)
35 		:
36 		fType(type),
37 		fWindow(window),
38 		fWindowElement(windowElement)
39 	{
40 	}
41 
42 	bool IsValid() const
43 	{
44 		return fType != TYPE_INVALID;
45 	}
46 
47 	Type GetType() const
48 	{
49 		return fType;
50 	}
51 
52 	int32 WindowToken() const
53 	{
54 		return fWindow;
55 	}
56 
57 	int32 WindowElement() const
58 	{
59 		return fWindowElement;
60 	}
61 
62 	bool operator==(const ClickTarget& other) const
63 	{
64 		return fType == other.fType && fWindow == other.fWindow
65 			&& fWindowElement == other.fWindowElement;
66 	}
67 
68 	bool operator!=(const ClickTarget& other) const
69 	{
70 		return !(*this == other);
71 	}
72 
73 private:
74 	Type	fType;
75 	int32	fWindow;
76 	int32	fWindowElement;
77 };
78 
79 
80 #endif	// CLICK_TARGET_H
81