172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file.
44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_GTK_H_
64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_GTK_H_
74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once
84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/basictypes.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/frame/browser_frame.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/views/frame/native_browser_frame.h"
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/window/window_gtk.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserNonClientFrameView;
154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserRootView;
164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass BrowserFrameGtk : public BrowserFrame,
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        public views::WindowGtk,
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        public NativeBrowserFrame {
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public:
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Normally you will create this class by calling BrowserFrame::Create.
224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Init must be called before using this class, which Create will do for you.
234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BrowserFrameGtk(BrowserView* browser_view, Profile* profile);
244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual ~BrowserFrameGtk();
254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Creates a frame view and initializes the window.  This
274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // initialization function must be called after construction, it is
284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // separate to avoid recursive calling of the frame from its
294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // constructor.
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void InitBrowserFrame();
314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch protected:
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Overridden from NativeBrowserFrame:
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual views::NativeWindow* AsNativeWindow() OVERRIDE;
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual const views::NativeWindow* AsNativeWindow() const OVERRIDE;
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual BrowserNonClientFrameView* CreateBrowserNonClientFrameView() OVERRIDE;
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual int GetMinimizeButtonOffset() const OVERRIDE;
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ui::ThemeProvider* GetThemeProviderForFrame() const OVERRIDE;
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool AlwaysUseNativeFrame() const OVERRIDE;
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void TabStripDisplayModeChanged() OVERRIDE;
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Overridden from views::WindowGtk:
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ui::ThemeProvider* GetThemeProvider() const OVERRIDE;
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SetInitialFocus() OVERRIDE;
454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual views::RootView* CreateRootView();
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual bool GetAccelerator(int cmd_id, ui::Accelerator* accelerator);
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual views::NonClientFrameView* CreateFrameViewForWindow() OVERRIDE;
484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual gboolean OnWindowStateEvent(GtkWidget* widget,
494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                      GdkEventWindowState* event);
504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual gboolean OnConfigureEvent(GtkWidget* widget,
514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                    GdkEventConfigure* event);
524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BrowserView* browser_view() const {
544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    return browser_view_;
554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  }
564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private:
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  NativeBrowserFrameDelegate* delegate_;
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The BrowserView is our ClientView. This is a pointer to it.
614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  BrowserView* browser_view_;
624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(BrowserFrameGtk);
644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_FRAME_GTK_H_
67