win: Implement NativeWindowWin::HasModalDialog().
authorCheng Zhao <zcbenz@gmail.com>
Wed, 4 Dec 2013 13:18:53 +0000 (21:18 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Wed, 4 Dec 2013 13:18:53 +0000 (21:18 +0800)
browser/native_window_win.cc

index f03d336..8954229 100644 (file)
@@ -194,6 +194,17 @@ class NativeWindowFramelessView : public views::NonClientFrameView {
   DISALLOW_COPY_AND_ASSIGN(NativeWindowFramelessView);
 };
 
+bool WindowHasModalDialog(HWND parent, HWND except, HWND after = NULL) {
+  HWND hwnd = ::FindWindowEx(parent, after, NULL, NULL);
+  if (hwnd != except &&
+      (::GetWindowLong(hwnd, GWL_STYLE) & (WS_VISIBLE | WS_POPUP)))
+    return true;
+  else if (hwnd == NULL)
+    return false;
+  else
+    return WindowHasModalDialog(parent, except, hwnd);
+}
+
 }  // namespace
 
 NativeWindowWin::NativeWindowWin(content::WebContents* web_contents,
@@ -359,6 +370,11 @@ bool NativeWindowWin::IsKiosk() {
   return IsFullscreen();
 }
 
+bool NativeWindowWin::HasModalDialog() {
+  return WindowHasModalDialog(GetNativeWindow(),
+                              GetWebContents()->GetView()->GetNativeView());
+}
+
 gfx::NativeWindow NativeWindowWin::GetNativeWindow() {
   return window_->GetNativeView();
 }