Home | History | Annotate | Download | only in frame
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/frame/panel_browser_view.h"
      6 
      7 #include "chrome/browser/chromeos/frame/panel_controller.h"
      8 #include "third_party/cros/chromeos_wm_ipc_enums.h"
      9 #include "views/widget/widget.h"
     10 #include "views/window/window.h"
     11 
     12 namespace {
     13 
     14 const int kPanelMinWidthPixels = 100;
     15 const int kPanelMinHeightPixels = 100;
     16 const int kPanelDefaultWidthPixels = 250;
     17 const int kPanelDefaultHeightPixels = 300;
     18 const float kPanelMaxWidthFactor = 0.80;
     19 const float kPanelMaxHeightFactor = 0.80;
     20 
     21 }
     22 
     23 namespace chromeos {
     24 
     25 PanelBrowserView::PanelBrowserView(Browser* browser)
     26     : BrowserView(browser),
     27       creator_xid_(0) {
     28 }
     29 
     30 ////////////////////////////////////////////////////////////////////////////////
     31 // PanelBrowserView functions
     32 
     33 void PanelBrowserView::LimitBounds(gfx::Rect* bounds) const {
     34   GdkScreen* screen = gtk_widget_get_screen(GetWidget()->GetNativeView());
     35   int max_width = gdk_screen_get_width(screen) * kPanelMaxWidthFactor;
     36   int max_height = gdk_screen_get_height(screen) * kPanelMaxHeightFactor;
     37 
     38   if (bounds->width() == 0 && bounds->height() == 0) {
     39     bounds->set_width(kPanelDefaultWidthPixels);
     40     bounds->set_height(kPanelDefaultHeightPixels);
     41   }
     42 
     43   if (bounds->width() < kPanelMinWidthPixels)
     44     bounds->set_width(kPanelMinWidthPixels);
     45   else if (bounds->width() > max_width)
     46     bounds->set_width(max_width);
     47 
     48   if (bounds->height() < kPanelMinHeightPixels)
     49     bounds->set_height(kPanelMinHeightPixels);
     50   else if (bounds->height() > max_height)
     51     bounds->set_height(max_height);
     52 }
     53 
     54 
     55 ////////////////////////////////////////////////////////////////////////////////
     56 // BrowserView overrides.
     57 
     58 void PanelBrowserView::Show() {
     59   InitPanelController(true);  // focus when opened
     60   ::BrowserView::Show();
     61 }
     62 
     63 void PanelBrowserView::ShowInactive() {
     64   InitPanelController(false);
     65   ::BrowserView::ShowInactive();
     66 }
     67 
     68 void PanelBrowserView::InitPanelController(bool is_active) {
     69   if (panel_controller_.get() == NULL) {
     70     panel_controller_.reset(new PanelController(this, GetNativeHandle()));
     71     panel_controller_->Init(
     72         is_active, bounds(), creator_xid_,
     73         WM_IPC_PANEL_USER_RESIZE_HORIZONTALLY_AND_VERTICALLY);
     74   }
     75 }
     76 
     77 void PanelBrowserView::SetBounds(const gfx::Rect& bounds) {
     78   gfx::Rect limit_bounds = bounds;
     79   LimitBounds(&limit_bounds);
     80   ::BrowserView::SetBounds(limit_bounds);
     81 }
     82 
     83 void PanelBrowserView::Close() {
     84   ::BrowserView::Close();
     85   if (panel_controller_.get())
     86     panel_controller_->Close();
     87 }
     88 
     89 void PanelBrowserView::UpdateTitleBar() {
     90   ::BrowserView::UpdateTitleBar();
     91   if (panel_controller_.get())
     92     panel_controller_->UpdateTitleBar();
     93 }
     94 
     95 void PanelBrowserView::SetCreatorView(PanelBrowserView* creator) {
     96   DCHECK(creator);
     97   GtkWindow* window = creator->GetNativeHandle();
     98   creator_xid_ = ui::GetX11WindowFromGtkWidget(GTK_WIDGET(window));
     99 }
    100 
    101 bool PanelBrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const {
    102   bool res = ::BrowserView::GetSavedWindowBounds(bounds);
    103   if (res)
    104     LimitBounds(bounds);
    105   return res;
    106 }
    107 
    108 void PanelBrowserView::OnWindowActivationChanged(bool active) {
    109   ::BrowserView::OnWindowActivationChanged(active);
    110   if (panel_controller_.get()) {
    111     if (active)
    112       panel_controller_->OnFocusIn();
    113     else
    114       panel_controller_->OnFocusOut();
    115   }
    116 }
    117 
    118 ////////////////////////////////////////////////////////////////////////////////
    119 // TabStripModelObserver overrides.
    120 
    121 void PanelBrowserView::TabChangedAt(TabContentsWrapper* contents,
    122                                     int index,
    123                                     TabChangeType change_type) {
    124   if (change_type == TabStripModelObserver::TITLE_NOT_LOADING)
    125     panel_controller_->SetUrgent(true);
    126 }
    127 
    128 ////////////////////////////////////////////////////////////////////////////////
    129 // PanelController::Delegate overrides.
    130 
    131 string16 PanelBrowserView::GetPanelTitle() {
    132   return browser()->GetWindowTitleForCurrentTab();
    133 }
    134 
    135 SkBitmap PanelBrowserView::GetPanelIcon() {
    136   return browser()->GetCurrentPageIcon();
    137 }
    138 
    139 bool PanelBrowserView::CanClosePanel() {
    140   return ::BrowserView::CanClose();
    141 }
    142 
    143 void PanelBrowserView::ClosePanel() {
    144   Close();
    145 }
    146 
    147 void PanelBrowserView::ActivatePanel() {
    148   Activate();
    149 }
    150 
    151 }  // namespace chromeos
    152