172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_GTK_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_GTK_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gdk/gdk.h> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <vector> 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/time.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/owned_widget_gtk.h" 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_widget_host_view.h" 183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/animation_delegate.h" 193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/slide_animation.h" 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/base/gtk/gtk_signal.h" 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h" 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/webcursor.h" 2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "webkit/plugins/npapi/gtk_plugin_container_manager.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RenderWidgetHost; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GtkIMContextWrapper; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GtkKeyBindingsHandler; 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(TOOLKIT_VIEWS) 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MenuGtk; 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct NativeWebKeyboardEvent; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_CHROMEOS) 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace views { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TooltipWindowGtk; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // defined(OS_CHROMEOS) 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkClipboard GtkClipboard; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkSelectionData GtkSelectionData; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ----------------------------------------------------------------------------- 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// See comments in render_widget_host_view.h about this class and its members. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ----------------------------------------------------------------------------- 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass RenderWidgetHostViewGtk : public RenderWidgetHostView, 473f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen public ui::AnimationDelegate { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit RenderWidgetHostViewGtk(RenderWidgetHost* widget); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~RenderWidgetHostViewGtk(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Initialize this object for use as a drawing area. 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void InitAsChild(); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderWidgetHostView implementation. 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void InitAsPopup(RenderWidgetHostView* parent_host_view, 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& pos); 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void InitAsFullscreen(); 5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual RenderWidgetHost* GetRenderWidgetHost() const; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidBecomeSelected(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void WasHidden(); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetSize(const gfx::Size& size); 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetBounds(const gfx::Rect& rect); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual gfx::NativeView GetNativeView(); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void MovePluginWindows( 6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::vector<webkit::npapi::WebPluginGeometry>& moves); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Focus(); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Blur(); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool HasFocus(); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Show(); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Hide(); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool IsShowing(); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual gfx::Rect GetViewBounds() const; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateCursor(const WebCursor& cursor); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetIsLoading(bool is_loading); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ImeUpdateTextInputState(WebKit::WebTextInputType type, 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& caret_rect); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ImeCancelComposition(); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidUpdateBackingStore( 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<gfx::Rect>& copy_rects); 8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void RenderViewGone(base::TerminationStatus status, 8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int error_code); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Destroy(); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void WillDestroyRenderWidget(RenderWidgetHost* rwh) {} 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetTooltipText(const std::wstring& tooltip_text); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SelectionChanged(const std::string& text); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowingContextMenu(bool showing); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual BackingStore* AllocBackingStore(const gfx::Size& size); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetBackground(const SkBitmap& background); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CreatePluginContainer(gfx::PluginWindowHandle id); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DestroyPluginContainer(gfx::PluginWindowHandle id); 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void SetVisuallyDeemphasized(const SkColor* color, bool animate); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ContainsNativeView(gfx::NativeView native_view) const; 95dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void AcceleratedCompositingActivated(bool activated); 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::PluginWindowHandle GetCompositingSurface(); 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 993f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // ui::AnimationDelegate implementation. 1003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual void AnimationEnded(const ui::Animation* animation); 1013f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual void AnimationProgressed(const ui::Animation* animation); 1023f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual void AnimationCanceled(const ui::Animation* animation); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::NativeView native_view() const { return view_.get(); } 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // If the widget is aligned with an edge of the monitor its on and the user 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // attempts to drag past that edge we track the number of times it has 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // occurred, so that we can force the widget to scroll when it otherwise 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // would be unable to. 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void ModifyEventForEdgeDragging(GtkWidget* widget, GdkEventMotion* event); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Paint(const gfx::Rect&); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called by GtkIMContextWrapper to forward a keyboard event to renderer. 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Before calling RenderWidgetHost::ForwardKeyboardEvent(), this method 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // calls GtkKeyBindingsHandler::Match() against the event and send matched 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // edit commands to renderer by calling 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderWidgetHost::ForwardEditCommandsForNextKeyEvent(). 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ForwardKeyboardEvent(const NativeWebKeyboardEvent& event); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GdkEventButton* last_mouse_down() const { 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return last_mouse_down_; 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(TOOLKIT_VIEWS) 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Appends the input methods context menu to the specified |menu| object as a 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // submenu. 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AppendInputMethodsContextMenu(MenuGtk* menu); 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class RenderWidgetHostViewGtkWidget; 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CHROMEGTK_CALLBACK_1(RenderWidgetHostViewGtk, 134dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen gboolean, 135dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen OnWindowStateEvent, 136dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GdkEventWindowState*); 137dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 138dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen CHROMEGTK_CALLBACK_0(RenderWidgetHostViewGtk, 139dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void, 140dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen OnDestroy); 141dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns whether the widget needs an input grab (GTK+ and X) to work 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // properly. 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool NeedsInputGrab(); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns whether this render view is a popup (<select> dropdown or 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // autocomplete window). 14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool IsPopup() const; 14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Do initialization needed by all InitAs*() methods. 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void DoSharedInit(); 15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Do initialization needed just by InitAsPopup() and InitAsFullscreen(). 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // We move and resize |window| to |bounds| and show it and its contents. 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void DoPopupOrFullscreenInit(GtkWindow* window, const gfx::Rect& bounds); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Update the display cursor for the render view. 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ShowCurrentCursor(); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void set_last_mouse_down(GdkEventButton* event); 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The model object. 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderWidgetHost* host_; 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The native UI widget. 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OwnedWidgetGtk view_; 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is true when we are currently painting and thus should handle extra 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // paint requests by expanding the invalid rect rather than actually 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // painting. 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool about_to_validate_and_paint_; 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is the rectangle which we'll paint. 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Rect invalid_rect_; 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Whether or not this widget is hidden. 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_hidden_; 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Whether we are currently loading. 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_loading_; 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The cursor for the page. This is passed up from the renderer. 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebCursor current_cursor_; 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Whether we are showing a context menu. 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_showing_context_menu_; 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time at which this view started displaying white pixels as a result of 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // not having anything to paint (empty backing store from renderer). This 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // value returns true for is_null() if we are not recording whiteout times. 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks whiteout_start_time_; 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time it took after this view was selected for it to be fully painted. 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks tab_switch_paint_time_; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 196201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // A color we use to shade the entire render view. If 100% transparent, we do 197201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // not shade the render view. 198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch SkColor overlay_color_; 199201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 200201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The animation used for the abovementioned shade effect. The animation's 201201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // value affects the alpha we use for |overlay_color_|. 2023f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen ui::SlideAnimation overlay_animation_; 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // The native view of our parent widget. Used only for popups. 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* parent_; 20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // We ignore the first mouse release on popups so the popup will remain open. 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_popup_first_mouse_release_; 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Whether or not this widget was focused before shadowed by another widget. 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used in OnGrabNotify() handler to track the focused state correctly. 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool was_focused_before_grab_; 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if we are responsible for creating an X grab. This will only be used 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // for <select> dropdowns. It should be true for most such cases, but false 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // for extension popups. 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool do_x_grab_; 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Is the widget fullscreen? 22072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool is_fullscreen_; 22172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 222dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // For full-screen windows we have a OnDestroy handler that we need to remove, 223dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // so we keep it ID here. 224dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen unsigned long destroy_handler_id_; 225dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A convenience wrapper object for GtkIMContext; 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<GtkIMContextWrapper> im_context_; 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A convenience object for handling editor key bindings defined in gtk 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // keyboard theme. 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<GtkKeyBindingsHandler> key_bindings_handler_; 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Helper class that lets us allocate plugin containers and move them. 23421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen webkit::npapi::GtkPluginContainerManager plugin_container_manager_; 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The size that we want the renderer to be. We keep this in a separate 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // variable because resizing in GTK+ is async. 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size requested_size_; 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The number of times the user has dragged against horizontal edge of the 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // monitor (if the widget is aligned with that edge). Negative values 2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // indicate the left edge, positive the right. 2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int dragged_at_horizontal_edge_; 2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The number of times the user has dragged against vertical edge of the 2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // monitor (if the widget is aligned with that edge). Negative values 2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // indicate the top edge, positive the bottom. 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int dragged_at_vertical_edge_; 2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen gfx::PluginWindowHandle compositing_surface_; 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The event for the last mouse down we handled. We need this for context 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // menus and drags. 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GdkEventButton* last_mouse_down_; 255dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_CHROMEOS) 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Custimized tooltip window. 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<views::TooltipWindowGtk> tooltip_window_; 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // defined(OS_CHROMEOS) 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_GTK_H_ 263