// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/ui/views/dropdown_bar_host.h"

#include "base/logging.h"
#include "ui/aura/window.h"
#include "ui/events/event.h"
#include "ui/views/view_constants_aura.h"
#include "ui/views/widget/widget.h"

using content::NativeWebKeyboardEvent;
using content::WebContents;

NativeWebKeyboardEvent DropdownBarHost::GetKeyboardEvent(
     const WebContents* contents,
     const ui::KeyEvent& key_event) {
  // NativeWebKeyboardEvent should take a const gfx::NativeEvent, which would
  // prevent this casting.
  ui::Event* ui_event =
      static_cast<ui::Event*>(const_cast<ui::KeyEvent*>(&key_event));
  return NativeWebKeyboardEvent(ui_event);
}

void DropdownBarHost::SetWidgetPositionNative(const gfx::Rect& new_pos,
                                              bool no_redraw) {
  if (!host_->IsVisible())
    host_->GetNativeView()->Show();
  host_->GetNativeView()->SetBounds(new_pos);

  // The z-order of |host_| is controlled by the view specified via
  // views::kHostViewKey.
}

void DropdownBarHost::SetHostViewNative(views::View* host_view) {
  host_->GetNativeView()->SetProperty(views::kHostViewKey, host_view);
}
