1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsQueryContentEventResult.h"
9 #include "mozilla/TextEvents.h"
11 using namespace mozilla
;
13 NS_INTERFACE_MAP_BEGIN(nsQueryContentEventResult
)
14 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports
, nsIQueryContentEventResult
)
15 NS_INTERFACE_MAP_ENTRY(nsIQueryContentEventResult
)
18 NS_IMPL_ADDREF(nsQueryContentEventResult
)
19 NS_IMPL_RELEASE(nsQueryContentEventResult
)
21 nsQueryContentEventResult::nsQueryContentEventResult() :
22 mEventID(0), mSucceeded(false)
26 nsQueryContentEventResult::~nsQueryContentEventResult()
31 nsQueryContentEventResult::GetOffset(uint32_t *aOffset
)
34 nsresult rv
= GetNotFound(¬Found
);
35 NS_ENSURE_SUCCESS(rv
, rv
);
36 NS_ENSURE_TRUE(!notFound
, NS_ERROR_NOT_AVAILABLE
);
41 static bool IsRectEnabled(uint32_t aEventID
)
43 return aEventID
== NS_QUERY_CARET_RECT
||
44 aEventID
== NS_QUERY_TEXT_RECT
||
45 aEventID
== NS_QUERY_EDITOR_RECT
||
46 aEventID
== NS_QUERY_CHARACTER_AT_POINT
;
50 nsQueryContentEventResult::GetReversed(bool *aReversed
)
52 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
53 NS_ENSURE_TRUE(mEventID
== NS_QUERY_SELECTED_TEXT
,
54 NS_ERROR_NOT_AVAILABLE
);
55 *aReversed
= mReversed
;
60 nsQueryContentEventResult::GetLeft(int32_t *aLeft
)
62 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
63 NS_ENSURE_TRUE(IsRectEnabled(mEventID
),
64 NS_ERROR_NOT_AVAILABLE
);
70 nsQueryContentEventResult::GetWidth(int32_t *aWidth
)
72 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
73 NS_ENSURE_TRUE(IsRectEnabled(mEventID
),
74 NS_ERROR_NOT_AVAILABLE
);
75 *aWidth
= mRect
.width
;
80 nsQueryContentEventResult::GetTop(int32_t *aTop
)
82 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
83 NS_ENSURE_TRUE(IsRectEnabled(mEventID
),
84 NS_ERROR_NOT_AVAILABLE
);
90 nsQueryContentEventResult::GetHeight(int32_t *aHeight
)
92 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
93 NS_ENSURE_TRUE(IsRectEnabled(mEventID
),
94 NS_ERROR_NOT_AVAILABLE
);
95 *aHeight
= mRect
.height
;
100 nsQueryContentEventResult::GetText(nsAString
&aText
)
102 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
103 NS_ENSURE_TRUE(mEventID
== NS_QUERY_SELECTED_TEXT
||
104 mEventID
== NS_QUERY_TEXT_CONTENT
,
105 NS_ERROR_NOT_AVAILABLE
);
111 nsQueryContentEventResult::GetSucceeded(bool *aSucceeded
)
113 NS_ENSURE_TRUE(mEventID
!= 0, NS_ERROR_NOT_INITIALIZED
);
114 *aSucceeded
= mSucceeded
;
119 nsQueryContentEventResult::GetNotFound(bool *aNotFound
)
121 NS_ENSURE_TRUE(mSucceeded
, NS_ERROR_NOT_AVAILABLE
);
122 NS_ENSURE_TRUE(mEventID
== NS_QUERY_SELECTED_TEXT
||
123 mEventID
== NS_QUERY_CHARACTER_AT_POINT
,
124 NS_ERROR_NOT_AVAILABLE
);
125 *aNotFound
= (mOffset
== WidgetQueryContentEvent::NOT_FOUND
);
130 nsQueryContentEventResult::SetEventResult(nsIWidget
* aWidget
,
131 const WidgetQueryContentEvent
&aEvent
)
133 mEventID
= aEvent
.message
;
134 mSucceeded
= aEvent
.mSucceeded
;
135 mReversed
= aEvent
.mReply
.mReversed
;
136 mRect
= aEvent
.mReply
.mRect
;
137 mOffset
= aEvent
.mReply
.mOffset
;
138 mString
= aEvent
.mReply
.mString
;
140 if (!IsRectEnabled(mEventID
) || !aWidget
|| !mSucceeded
) {
144 nsIWidget
* topWidget
= aWidget
->GetTopLevelWidget();
145 if (!topWidget
|| topWidget
== aWidget
) {
149 // Convert the top widget related coordinates to the given widget's.
151 aWidget
->WidgetToScreenOffset() - topWidget
->WidgetToScreenOffset();
152 mRect
.MoveBy(-offset
);