|
Lines 149-154
typedef HashMap<GtkWidget*, IntRect> WebKitWebViewChildrenMap;
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec1
|
| 149 |
typedef HashMap<uint32_t, GUniquePtr<GdkEvent>> TouchEventsMap; |
149 |
typedef HashMap<uint32_t, GUniquePtr<GdkEvent>> TouchEventsMap; |
| 150 |
|
150 |
|
| 151 |
struct _WebKitWebViewBasePrivate { |
151 |
struct _WebKitWebViewBasePrivate { |
|
|
152 |
_WebKitWebViewBasePrivate() |
| 153 |
: updateViewStateTimer(RunLoop::main(), this, &_WebKitWebViewBasePrivate::updateViewStateTimerFired) |
| 154 |
{ |
| 155 |
} |
| 156 |
|
| 157 |
void updateViewStateTimerFired() |
| 158 |
{ |
| 159 |
if (!pageProxy) |
| 160 |
return; |
| 161 |
pageProxy->viewStateDidChange(viewStateFlagsToUpdate); |
| 162 |
viewStateFlagsToUpdate = ViewState::NoFlags; |
| 163 |
} |
| 164 |
|
| 152 |
WebKitWebViewChildrenMap children; |
165 |
WebKitWebViewChildrenMap children; |
| 153 |
std::unique_ptr<PageClientImpl> pageClient; |
166 |
std::unique_ptr<PageClientImpl> pageClient; |
| 154 |
RefPtr<WebPageProxy> pageProxy; |
167 |
RefPtr<WebPageProxy> pageProxy; |
|
Lines 170-182
struct _WebKitWebViewBasePrivate {
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec2
|
| 170 |
GtkWindow* toplevelOnScreenWindow; |
183 |
GtkWindow* toplevelOnScreenWindow; |
| 171 |
unsigned long toplevelFocusInEventID; |
184 |
unsigned long toplevelFocusInEventID; |
| 172 |
unsigned long toplevelFocusOutEventID; |
185 |
unsigned long toplevelFocusOutEventID; |
| 173 |
unsigned long toplevelVisibilityEventID; |
186 |
unsigned long toplevelWindowStateEventID; |
| 174 |
|
187 |
|
| 175 |
// View State. |
188 |
// View State. |
| 176 |
bool isInWindowActive : 1; |
189 |
ViewState::Flags viewState; |
| 177 |
bool isFocused : 1; |
190 |
ViewState::Flags viewStateFlagsToUpdate; |
| 178 |
bool isVisible : 1; |
191 |
RunLoop::Timer<WebKitWebViewBasePrivate> updateViewStateTimer; |
| 179 |
bool isWindowVisible : 1; |
|
|
| 180 |
|
192 |
|
| 181 |
WebKitWebViewBaseDownloadRequestHandler downloadHandler; |
193 |
WebKitWebViewBaseDownloadRequestHandler downloadHandler; |
| 182 |
|
194 |
|
|
Lines 204-216
struct _WebKitWebViewBasePrivate {
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec3
|
| 204 |
|
216 |
|
| 205 |
WEBKIT_DEFINE_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER) |
217 |
WEBKIT_DEFINE_TYPE(WebKitWebViewBase, webkit_web_view_base, GTK_TYPE_CONTAINER) |
| 206 |
|
218 |
|
|
|
219 |
static void webkitWebViewBaseScheduleUpdateViewState(WebKitWebViewBase* webViewBase, ViewState::Flags flagsToUpdate) |
| 220 |
{ |
| 221 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 222 |
priv->viewStateFlagsToUpdate |= flagsToUpdate; |
| 223 |
if (priv->updateViewStateTimer.isActive()) |
| 224 |
return; |
| 225 |
|
| 226 |
priv->updateViewStateTimer.startOneShot(0); |
| 227 |
} |
| 228 |
|
| 207 |
static gboolean toplevelWindowFocusInEvent(GtkWidget*, GdkEventFocus*, WebKitWebViewBase* webViewBase) |
229 |
static gboolean toplevelWindowFocusInEvent(GtkWidget*, GdkEventFocus*, WebKitWebViewBase* webViewBase) |
| 208 |
{ |
230 |
{ |
| 209 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
231 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 210 |
if (!priv->isInWindowActive) { |
232 |
if (priv->viewState & ViewState::WindowIsActive) |
| 211 |
priv->isInWindowActive = true; |
233 |
return FALSE; |
| 212 |
priv->pageProxy->viewStateDidChange(ViewState::WindowIsActive); |
234 |
|
| 213 |
} |
235 |
priv->viewState |= ViewState::WindowIsActive; |
|
|
236 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, ViewState::WindowIsActive); |
| 214 |
|
237 |
|
| 215 |
return FALSE; |
238 |
return FALSE; |
| 216 |
} |
239 |
} |
|
Lines 218-239
static gboolean toplevelWindowFocusInEvent(GtkWidget*, GdkEventFocus*, WebKitWeb
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec4
|
| 218 |
static gboolean toplevelWindowFocusOutEvent(GtkWidget*, GdkEventFocus*, WebKitWebViewBase* webViewBase) |
241 |
static gboolean toplevelWindowFocusOutEvent(GtkWidget*, GdkEventFocus*, WebKitWebViewBase* webViewBase) |
| 219 |
{ |
242 |
{ |
| 220 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
243 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 221 |
if (priv->isInWindowActive) { |
244 |
if (!(priv->viewState & ViewState::WindowIsActive)) |
| 222 |
priv->isInWindowActive = false; |
245 |
return FALSE; |
| 223 |
priv->pageProxy->viewStateDidChange(ViewState::WindowIsActive); |
246 |
|
| 224 |
} |
247 |
priv->viewState &= ~ViewState::WindowIsActive; |
|
|
248 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, ViewState::WindowIsActive); |
| 225 |
|
249 |
|
| 226 |
return FALSE; |
250 |
return FALSE; |
| 227 |
} |
251 |
} |
| 228 |
|
252 |
|
| 229 |
static gboolean toplevelWindowVisibilityEvent(GtkWidget*, GdkEventVisibility* visibilityEvent, WebKitWebViewBase* webViewBase) |
253 |
static gboolean toplevelWindowStateEvent(GtkWidget*, GdkEventWindowState* event, WebKitWebViewBase* webViewBase) |
| 230 |
{ |
254 |
{ |
| 231 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
255 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 232 |
bool isWindowVisible = visibilityEvent->state != GDK_VISIBILITY_FULLY_OBSCURED; |
256 |
if (!(event->changed_mask & GDK_WINDOW_STATE_ICONIFIED)) |
| 233 |
if (priv->isWindowVisible != isWindowVisible) { |
257 |
return FALSE; |
| 234 |
priv->isWindowVisible = isWindowVisible; |
258 |
|
| 235 |
priv->pageProxy->viewStateDidChange(ViewState::IsVisible); |
259 |
bool visible = !(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED); |
| 236 |
} |
260 |
if ((visible && priv->viewState & ViewState::IsVisible) || (!visible && !(priv->viewState & ViewState::IsVisible))) |
|
|
261 |
return FALSE; |
| 262 |
|
| 263 |
if (visible) |
| 264 |
priv->viewState |= ViewState::IsVisible; |
| 265 |
else |
| 266 |
priv->viewState &= ~ViewState::IsVisible; |
| 267 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, ViewState::IsVisible); |
| 237 |
|
268 |
|
| 238 |
return FALSE; |
269 |
return FALSE; |
| 239 |
} |
270 |
} |
|
Lines 252-264
static void webkitWebViewBaseSetToplevelOnScreenWindow(WebKitWebViewBase* webVie
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec5
|
| 252 |
g_signal_handler_disconnect(priv->toplevelOnScreenWindow, priv->toplevelFocusOutEventID); |
283 |
g_signal_handler_disconnect(priv->toplevelOnScreenWindow, priv->toplevelFocusOutEventID); |
| 253 |
priv->toplevelFocusOutEventID = 0; |
284 |
priv->toplevelFocusOutEventID = 0; |
| 254 |
} |
285 |
} |
| 255 |
if (priv->toplevelVisibilityEventID) { |
286 |
if (priv->toplevelWindowStateEventID) { |
| 256 |
g_signal_handler_disconnect(priv->toplevelOnScreenWindow, priv->toplevelVisibilityEventID); |
287 |
g_signal_handler_disconnect(priv->toplevelOnScreenWindow, priv->toplevelWindowStateEventID); |
| 257 |
priv->toplevelVisibilityEventID = 0; |
288 |
priv->toplevelWindowStateEventID = 0; |
| 258 |
} |
289 |
} |
| 259 |
|
290 |
|
| 260 |
priv->toplevelOnScreenWindow = window; |
291 |
priv->toplevelOnScreenWindow = window; |
| 261 |
priv->pageProxy->viewStateDidChange(ViewState::IsInWindow); |
292 |
if (!(priv->viewState & ViewState::IsInWindow)) { |
|
|
293 |
priv->viewState |= ViewState::IsInWindow; |
| 294 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, ViewState::IsInWindow); |
| 295 |
} |
| 262 |
if (!priv->toplevelOnScreenWindow) |
296 |
if (!priv->toplevelOnScreenWindow) |
| 263 |
return; |
297 |
return; |
| 264 |
|
298 |
|
|
Lines 268-276
static void webkitWebViewBaseSetToplevelOnScreenWindow(WebKitWebViewBase* webVie
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec6
|
| 268 |
priv->toplevelFocusOutEventID = |
302 |
priv->toplevelFocusOutEventID = |
| 269 |
g_signal_connect(priv->toplevelOnScreenWindow, "focus-out-event", |
303 |
g_signal_connect(priv->toplevelOnScreenWindow, "focus-out-event", |
| 270 |
G_CALLBACK(toplevelWindowFocusOutEvent), webViewBase); |
304 |
G_CALLBACK(toplevelWindowFocusOutEvent), webViewBase); |
| 271 |
priv->toplevelVisibilityEventID = |
305 |
priv->toplevelWindowStateEventID = |
| 272 |
g_signal_connect(priv->toplevelOnScreenWindow, "visibility-notify-event", |
306 |
g_signal_connect(priv->toplevelOnScreenWindow, "window-state-event", G_CALLBACK(toplevelWindowStateEvent), webViewBase); |
| 273 |
G_CALLBACK(toplevelWindowVisibilityEvent), webViewBase); |
|
|
| 274 |
} |
307 |
} |
| 275 |
|
308 |
|
| 276 |
static void webkitWebViewBaseRealize(GtkWidget* widget) |
309 |
static void webkitWebViewBaseRealize(GtkWidget* widget) |
|
Lines 626-646
static void webkitWebViewBaseMap(GtkWidget* widget)
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec7
|
| 626 |
|
659 |
|
| 627 |
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget); |
660 |
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget); |
| 628 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
661 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 629 |
if (!priv->isVisible) { |
662 |
if (priv->viewState & ViewState::IsVisible) |
| 630 |
priv->isVisible = true; |
663 |
return; |
| 631 |
priv->pageProxy->viewStateDidChange(ViewState::IsVisible); |
664 |
|
| 632 |
} |
665 |
priv->viewState |= ViewState::IsVisible; |
|
|
666 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, ViewState::IsVisible); |
| 633 |
} |
667 |
} |
| 634 |
|
668 |
|
| 635 |
static void webkitWebViewBaseUnmap(GtkWidget* widget) |
669 |
static void webkitWebViewBaseUnmap(GtkWidget* widget) |
| 636 |
{ |
670 |
{ |
| 637 |
GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->unmap(widget); |
671 |
GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->unmap(widget); |
| 638 |
|
672 |
|
| 639 |
WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(widget)->priv; |
673 |
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget); |
| 640 |
if (priv->isVisible) { |
674 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 641 |
priv->isVisible = false; |
675 |
if (!(priv->viewState & ViewState::IsVisible)) |
| 642 |
priv->pageProxy->viewStateDidChange(ViewState::IsVisible); |
676 |
return; |
| 643 |
} |
677 |
|
|
|
678 |
priv->viewState &= ~ViewState::IsVisible; |
| 679 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, ViewState::IsVisible); |
| 644 |
} |
680 |
} |
| 645 |
|
681 |
|
| 646 |
static gboolean webkitWebViewBaseFocusInEvent(GtkWidget* widget, GdkEventFocus* event) |
682 |
static gboolean webkitWebViewBaseFocusInEvent(GtkWidget* widget, GdkEventFocus* event) |
|
Lines 1333-1379
GdkEvent* webkitWebViewBaseTakeContextMenuEvent(WebKitWebViewBase* webkitWebView
a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec8
|
| 1333 |
void webkitWebViewBaseSetFocus(WebKitWebViewBase* webViewBase, bool focused) |
1369 |
void webkitWebViewBaseSetFocus(WebKitWebViewBase* webViewBase, bool focused) |
| 1334 |
{ |
1370 |
{ |
| 1335 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
1371 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 1336 |
if (priv->isFocused == focused) |
1372 |
if ((focused && priv->viewState & ViewState::IsFocused) || (!focused && !(priv->viewState & ViewState::IsFocused))) |
| 1337 |
return; |
1373 |
return; |
| 1338 |
|
1374 |
|
| 1339 |
unsigned viewStateFlags = ViewState::IsFocused; |
1375 |
ViewState::Flags flagsToUpdate = ViewState::IsFocused; |
| 1340 |
priv->isFocused = focused; |
1376 |
if (focused) { |
| 1341 |
|
1377 |
priv->viewState |= ViewState::IsFocused; |
| 1342 |
// If the view has received the focus and the window is not active |
1378 |
|
| 1343 |
// mark the current window as active now. This can happen if the |
1379 |
// If the view has received the focus and the window is not active |
| 1344 |
// toplevel window is a GTK_WINDOW_POPUP and the focus has been |
1380 |
// mark the current window as active now. This can happen if the |
| 1345 |
// set programatically like WebKitTestRunner does, because POPUP |
1381 |
// toplevel window is a GTK_WINDOW_POPUP and the focus has been |
| 1346 |
// can't be focused. |
1382 |
// set programatically like WebKitTestRunner does, because POPUP |
| 1347 |
if (priv->isFocused && !priv->isInWindowActive) { |
1383 |
// can't be focused. |
| 1348 |
priv->isInWindowActive = true; |
1384 |
if (!(priv->viewState & ViewState::WindowIsActive)) { |
| 1349 |
viewStateFlags |= ViewState::WindowIsActive; |
1385 |
priv->viewState |= ViewState::WindowIsActive; |
| 1350 |
} |
1386 |
flagsToUpdate |= ViewState::WindowIsActive; |
| 1351 |
priv->pageProxy->viewStateDidChange(viewStateFlags); |
1387 |
} |
|
|
1388 |
} else |
| 1389 |
priv->viewState &= ~ViewState::IsFocused; |
| 1390 |
|
| 1391 |
webkitWebViewBaseScheduleUpdateViewState(webViewBase, flagsToUpdate); |
| 1352 |
} |
1392 |
} |
| 1353 |
|
1393 |
|
| 1354 |
bool webkitWebViewBaseIsInWindowActive(WebKitWebViewBase* webViewBase) |
1394 |
bool webkitWebViewBaseIsInWindowActive(WebKitWebViewBase* webViewBase) |
| 1355 |
{ |
1395 |
{ |
| 1356 |
return webViewBase->priv->isInWindowActive; |
1396 |
return webViewBase->priv->viewState & ViewState::WindowIsActive; |
| 1357 |
} |
1397 |
} |
| 1358 |
|
1398 |
|
| 1359 |
bool webkitWebViewBaseIsFocused(WebKitWebViewBase* webViewBase) |
1399 |
bool webkitWebViewBaseIsFocused(WebKitWebViewBase* webViewBase) |
| 1360 |
{ |
1400 |
{ |
| 1361 |
return webViewBase->priv->isFocused; |
1401 |
return webViewBase->priv->viewState & ViewState::IsFocused; |
| 1362 |
} |
1402 |
} |
| 1363 |
|
1403 |
|
| 1364 |
bool webkitWebViewBaseIsVisible(WebKitWebViewBase* webViewBase) |
1404 |
bool webkitWebViewBaseIsVisible(WebKitWebViewBase* webViewBase) |
| 1365 |
{ |
1405 |
{ |
| 1366 |
return webViewBase->priv->isVisible; |
1406 |
return webViewBase->priv->viewState & ViewState::IsVisible; |
| 1367 |
} |
1407 |
} |
| 1368 |
|
1408 |
|
| 1369 |
bool webkitWebViewBaseIsInWindow(WebKitWebViewBase* webViewBase) |
1409 |
bool webkitWebViewBaseIsInWindow(WebKitWebViewBase* webViewBase) |
| 1370 |
{ |
1410 |
{ |
| 1371 |
return webViewBase->priv->toplevelOnScreenWindow; |
1411 |
return webViewBase->priv->viewState & ViewState::IsInWindow; |
| 1372 |
} |
|
|
| 1373 |
|
| 1374 |
bool webkitWebViewBaseIsWindowVisible(WebKitWebViewBase* webViewBase) |
| 1375 |
{ |
| 1376 |
return webViewBase->priv->isWindowVisible; |
| 1377 |
} |
1412 |
} |
| 1378 |
|
1413 |
|
| 1379 |
void webkitWebViewBaseSetDownloadRequestHandler(WebKitWebViewBase* webViewBase, WebKitWebViewBaseDownloadRequestHandler downloadHandler) |
1414 |
void webkitWebViewBaseSetDownloadRequestHandler(WebKitWebViewBase* webViewBase, WebKitWebViewBaseDownloadRequestHandler downloadHandler) |