Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(345)

Side by Side Diff: views/widget/widget_gtk.h

Issue 7015051: Re-land: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/widget/widget.cc ('k') | views/widget/widget_gtk.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef VIEWS_WIDGET_WIDGET_GTK_H_ 5 #ifndef VIEWS_WIDGET_WIDGET_GTK_H_
6 #define VIEWS_WIDGET_WIDGET_GTK_H_ 6 #define VIEWS_WIDGET_WIDGET_GTK_H_
7 #pragma once 7 #pragma once
8 8
9 #include <gtk/gtk.h> 9 #include <gtk/gtk.h>
10 10
(...skipping 23 matching lines...) Expand all
34 class InputMethod; 34 class InputMethod;
35 class TooltipManagerGtk; 35 class TooltipManagerGtk;
36 class View; 36 class View;
37 class WindowGtk; 37 class WindowGtk;
38 38
39 namespace internal { 39 namespace internal {
40 class NativeWidgetDelegate; 40 class NativeWidgetDelegate;
41 } 41 }
42 42
43 // Widget implementation for GTK. 43 // Widget implementation for GTK.
44 class WidgetGtk : public Widget, 44 class WidgetGtk : public NativeWidget,
45 public NativeWidget,
46 public ui::ActiveWindowWatcherX::Observer, 45 public ui::ActiveWindowWatcherX::Observer,
47 public internal::InputMethodDelegate { 46 public internal::InputMethodDelegate {
48 public: 47 public:
49 WidgetGtk(); 48 explicit WidgetGtk(internal::NativeWidgetDelegate* delegate);
50 virtual ~WidgetGtk(); 49 virtual ~WidgetGtk();
51 50
52 // Marks this window as transient to its parent. A window that is transient
53 // to its parent results in the parent rendering active when the child is
54 // active.
55 // This must be invoked before Init. This is only used for types other than
56 // TYPE_CHILD. The default is false.
57 // See gtk_window_set_transient_for for details.
58 void make_transient_to_parent() {
59 DCHECK(!widget_);
60 transient_to_parent_ = true;
61 }
62
63 // Returns the transient parent. See make_transient_to_parent for details on 51 // Returns the transient parent. See make_transient_to_parent for details on
64 // what the transient parent is. 52 // what the transient parent is.
65 GtkWindow* GetTransientParent() const; 53 GtkWindow* GetTransientParent() const;
66 54
67 // Makes the background of the window totally transparent. This must be 55 // Makes the background of the window totally transparent. This must be
68 // invoked before Init. This does a couple of checks and returns true if 56 // invoked before Init. This does a couple of checks and returns true if
69 // the window can be made transparent. The actual work of making the window 57 // the window can be made transparent. The actual work of making the window
70 // transparent is done by ConfigureWidgetForTransparentBackground. 58 // transparent is done by ConfigureWidgetForTransparentBackground.
71 // This works for both child and window types. 59 // This works for both child and window types.
72 bool MakeTransparent(); 60 bool MakeTransparent();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 void ResetDropTarget(); 104 void ResetDropTarget();
117 105
118 // Gets the requested size of the widget. This can be the size 106 // Gets the requested size of the widget. This can be the size
119 // stored in properties for a GtkViewsFixed, or in the requisitioned 107 // stored in properties for a GtkViewsFixed, or in the requisitioned
120 // size of other kinds of widgets. 108 // size of other kinds of widgets.
121 void GetRequestedSize(gfx::Size* out) const; 109 void GetRequestedSize(gfx::Size* out) const;
122 110
123 // Overridden from ui::ActiveWindowWatcherX::Observer. 111 // Overridden from ui::ActiveWindowWatcherX::Observer.
124 virtual void ActiveWindowChanged(GdkWindow* active_window); 112 virtual void ActiveWindowChanged(GdkWindow* active_window);
125 113
126 // Overridden from Widget:
127 virtual gfx::NativeView GetNativeView() const;
128 virtual gfx::NativeWindow GetNativeWindow() const;
129 virtual bool GetAccelerator(int cmd_id, ui::Accelerator* accelerator);
130 virtual Window* GetWindow();
131 virtual const Window* GetWindow() const;
132 virtual void ViewHierarchyChanged(bool is_add, View *parent,
133 View *child);
134 virtual void NotifyAccessibilityEvent(
135 View* view,
136 ui::AccessibilityTypes::Event event_type,
137 bool send_native_event);
138
139 // Clears the focus on the native widget having the focus. 114 // Clears the focus on the native widget having the focus.
140 virtual void ClearNativeFocus(); 115 virtual void ClearNativeFocus();
141 116
142 // Handles a keyboard event by sending it to our focus manager. 117 // Handles a keyboard event by sending it to our focus manager.
143 // Returns true if it's handled by the focus manager. 118 // Returns true if it's handled by the focus manager.
144 bool HandleKeyboardEvent(const KeyEvent& key); 119 bool HandleKeyboardEvent(const KeyEvent& key);
145 120
146 // Enables debug painting. See |debug_paint_enabled_| for details. 121 // Enables debug painting. See |debug_paint_enabled_| for details.
147 static void EnableDebugPaint(); 122 static void EnableDebugPaint();
148 123
(...skipping 12 matching lines...) Expand all
161 // If you are adding a GtkWidget with its own GdkWindow that may 136 // If you are adding a GtkWidget with its own GdkWindow that may
162 // fill the entire area of the WidgetGtk to the view hierachy, you 137 // fill the entire area of the WidgetGtk to the view hierachy, you
163 // need use this function to tell WM that when the widget is ready 138 // need use this function to tell WM that when the widget is ready
164 // to be shown. 139 // to be shown.
165 // Caller of this method do not need to disconnect this because the 140 // Caller of this method do not need to disconnect this because the
166 // handler will be removed upon the first invocation of the handler, 141 // handler will be removed upon the first invocation of the handler,
167 // or when the widget is re-attached, and expose won't be emitted on 142 // or when the widget is re-attached, and expose won't be emitted on
168 // detached widget. 143 // detached widget.
169 static void RegisterChildExposeHandler(GtkWidget* widget); 144 static void RegisterChildExposeHandler(GtkWidget* widget);
170 145
146 void set_focus_on_creation(bool focus_on_creation) {
147 focus_on_creation_ = focus_on_creation;
148 }
149
171 // Overridden from NativeWidget: 150 // Overridden from NativeWidget:
172 virtual void InitNativeWidget(const InitParams& params) OVERRIDE; 151 virtual void InitNativeWidget(const Widget::InitParams& params) OVERRIDE;
173 virtual Widget* GetWidget() OVERRIDE; 152 virtual Widget* GetWidget() OVERRIDE;
153 virtual const Widget* GetWidget() const OVERRIDE;
154 virtual gfx::NativeView GetNativeView() const OVERRIDE;
155 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE;
156 virtual Window* GetContainingWindow() OVERRIDE;
157 virtual const Window* GetContainingWindow() const OVERRIDE;
158 virtual void ViewRemoved(View* view) OVERRIDE;
174 virtual void SetNativeWindowProperty(const char* name, void* value) OVERRIDE; 159 virtual void SetNativeWindowProperty(const char* name, void* value) OVERRIDE;
175 virtual void* GetNativeWindowProperty(const char* name) OVERRIDE; 160 virtual void* GetNativeWindowProperty(const char* name) OVERRIDE;
176 virtual TooltipManager* GetTooltipManager() const OVERRIDE; 161 virtual TooltipManager* GetTooltipManager() const OVERRIDE;
177 virtual bool IsScreenReaderActive() const OVERRIDE; 162 virtual bool IsScreenReaderActive() const OVERRIDE;
163 virtual void SendNativeAccessibilityEvent(
164 View* view,
165 ui::AccessibilityTypes::Event event_type) OVERRIDE;
178 virtual void SetMouseCapture() OVERRIDE; 166 virtual void SetMouseCapture() OVERRIDE;
179 virtual void ReleaseMouseCapture() OVERRIDE; 167 virtual void ReleaseMouseCapture() OVERRIDE;
180 virtual bool HasMouseCapture() const OVERRIDE; 168 virtual bool HasMouseCapture() const OVERRIDE;
169 virtual bool IsMouseButtonDown() const OVERRIDE;
181 virtual InputMethod* GetInputMethodNative() OVERRIDE; 170 virtual InputMethod* GetInputMethodNative() OVERRIDE;
182 virtual void ReplaceInputMethod(InputMethod* input_method) OVERRIDE; 171 virtual void ReplaceInputMethod(InputMethod* input_method) OVERRIDE;
183 virtual gfx::Rect GetWindowScreenBounds() const OVERRIDE; 172 virtual gfx::Rect GetWindowScreenBounds() const OVERRIDE;
184 virtual gfx::Rect GetClientAreaScreenBounds() const OVERRIDE; 173 virtual gfx::Rect GetClientAreaScreenBounds() const OVERRIDE;
185 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; 174 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
186 virtual void SetSize(const gfx::Size& size) OVERRIDE; 175 virtual void SetSize(const gfx::Size& size) OVERRIDE;
187 virtual void MoveAbove(gfx::NativeView native_view) OVERRIDE; 176 virtual void MoveAbove(gfx::NativeView native_view) OVERRIDE;
188 virtual void SetShape(gfx::NativeRegion shape) OVERRIDE; 177 virtual void SetShape(gfx::NativeRegion shape) OVERRIDE;
189 virtual void Close() OVERRIDE; 178 virtual void Close() OVERRIDE;
190 virtual void CloseNow() OVERRIDE; 179 virtual void CloseNow() OVERRIDE;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 // when a window holding grab is closed without releasing grab. 250 // when a window holding grab is closed without releasing grab.
262 virtual void HandleXGrabBroke(); 251 virtual void HandleXGrabBroke();
263 252
264 // Are we a subclass of WindowGtk? 253 // Are we a subclass of WindowGtk?
265 bool is_window_; 254 bool is_window_;
266 255
267 private: 256 private:
268 class DropObserver; 257 class DropObserver;
269 friend class DropObserver; 258 friend class DropObserver;
270 259
271 // Overridden from Widget
272 virtual RootView* CreateRootView() OVERRIDE;
273
274 // Overridden from NativeWidget 260 // Overridden from NativeWidget
275 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE; 261 virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
276 262
277 // Overridden from internal::InputMethodDelegate 263 // Overridden from internal::InputMethodDelegate
278 virtual void DispatchKeyEventPostIME(const KeyEvent& key) OVERRIDE; 264 virtual void DispatchKeyEventPostIME(const KeyEvent& key) OVERRIDE;
279 265
280 void SetInitParams(const InitParams& params); 266 void SetInitParams(const Widget::InitParams& params);
281 267
282 // This is called only when the window is transparent. 268 // This is called only when the window is transparent.
283 CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnWindowPaint, GdkEventExpose*); 269 CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnWindowPaint, GdkEventExpose*);
284 270
285 // Callbacks for expose event on child widgets. See the description of 271 // Callbacks for expose event on child widgets. See the description of
286 // RegisterChildChildExposeHandler. 272 // RegisterChildChildExposeHandler.
287 void OnChildExpose(GtkWidget* child); 273 void OnChildExpose(GtkWidget* child);
288 static gboolean ChildExposeHandler(GtkWidget* widget, GdkEventExpose* event); 274 static gboolean ChildExposeHandler(GtkWidget* widget, GdkEventExpose* event);
289 275
290 // Returns the first ancestor of |widget| that is a window. 276 // Returns the first ancestor of |widget| that is a window.
291 static Window* GetWindowImpl(GtkWidget* widget); 277 static Window* GetWindowImpl(GtkWidget* widget);
292 278
293 // Creates the GtkWidget. 279 // Creates the GtkWidget.
294 void CreateGtkWidget(const InitParams& params); 280 void CreateGtkWidget(const Widget::InitParams& params);
295 281
296 // Invoked from create widget to enable the various bits needed for a 282 // Invoked from create widget to enable the various bits needed for a
297 // transparent background. This is only invoked if MakeTransparent has been 283 // transparent background. This is only invoked if MakeTransparent has been
298 // invoked. 284 // invoked.
299 void ConfigureWidgetForTransparentBackground(GtkWidget* parent); 285 void ConfigureWidgetForTransparentBackground(GtkWidget* parent);
300 286
301 // Invoked from create widget to enable the various bits needed for a 287 // Invoked from create widget to enable the various bits needed for a
302 // window which doesn't receive events. 288 // window which doesn't receive events.
303 void ConfigureWidgetForIgnoreEvents(); 289 void ConfigureWidgetForIgnoreEvents();
304 290
305 // A utility function to draw a transparent background onto the |widget|. 291 // A utility function to draw a transparent background onto the |widget|.
306 static void DrawTransparentBackground(GtkWidget* widget, 292 static void DrawTransparentBackground(GtkWidget* widget,
307 GdkEventExpose* event); 293 GdkEventExpose* event);
308 294
309 // A delegate implementation that handles events received here. 295 // A delegate implementation that handles events received here.
296 // See class documentation for Widget in widget.h for a note about ownership.
310 internal::NativeWidgetDelegate* delegate_; 297 internal::NativeWidgetDelegate* delegate_;
311 298
312 // Our native views. If we're a window/popup, then widget_ is the window and 299 // Our native views. If we're a window/popup, then widget_ is the window and
313 // window_contents_ is a GtkFixed. If we're not a window/popup, then widget_ 300 // window_contents_ is a GtkFixed. If we're not a window/popup, then widget_
314 // and window_contents_ point to the same GtkFixed. 301 // and window_contents_ point to the same GtkFixed.
315 GtkWidget* widget_; 302 GtkWidget* widget_;
316 GtkWidget* window_contents_; 303 GtkWidget* window_contents_;
317 304
318 // Child GtkWidgets created with no parent need to be parented to a valid top 305 // Child GtkWidgets created with no parent need to be parented to a valid top
319 // level window otherwise Gtk throws a fit. |null_parent_| is an invisible 306 // level window otherwise Gtk throws a fit. |null_parent_| is an invisible
320 // popup that such GtkWidgets are parented to. 307 // popup that such GtkWidgets are parented to.
321 static GtkWidget* null_parent_; 308 static GtkWidget* null_parent_;
322 309
323 // True if the widget is a child of some other widget. 310 // True if the widget is a child of some other widget.
324 bool child_; 311 bool child_;
325 312
326 // The TooltipManager. 313 // The TooltipManager.
327 // WARNING: RootView's destructor calls into the TooltipManager. As such, this 314 // WARNING: RootView's destructor calls into the TooltipManager. As such, this
328 // must be destroyed AFTER root_view_. 315 // must be destroyed AFTER root_view_.
329 scoped_ptr<TooltipManagerGtk> tooltip_manager_; 316 scoped_ptr<TooltipManagerGtk> tooltip_manager_;
330 317
331 scoped_ptr<DropTargetGtk> drop_target_; 318 scoped_ptr<DropTargetGtk> drop_target_;
332 319
333 // The following factory is used to delay destruction. 320 // The following factory is used to delay destruction.
334 ScopedRunnableMethodFactory<WidgetGtk> close_widget_factory_; 321 ScopedRunnableMethodFactory<WidgetGtk> close_widget_factory_;
335 322
336 // See description above setter. 323 // See class documentation for Widget in widget.h for a note about ownership.
337 bool delete_on_destroy_; 324 bool delete_on_destroy_;
338 325
339 // See description above make_transparent for details. 326 // See description above make_transparent for details.
340 bool transparent_; 327 bool transparent_;
341 328
342 // Makes the window pass all events through to any windows behind it. 329 // Makes the window pass all events through to any windows behind it.
343 // Set during SetInitParams before the widget is created. The actual work of 330 // Set during SetInitParams before the widget is created. The actual work of
344 // making the window ignore events is done by ConfigureWidgetForIgnoreEvents. 331 // making the window ignore events is done by ConfigureWidgetForIgnoreEvents.
345 bool ignore_events_; 332 bool ignore_events_;
346 333
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 // request focus on some widget. Because of async events on Gtk this becomes 365 // request focus on some widget. Because of async events on Gtk this becomes
379 // show, request focus, get focus in event which ends up clearing focus 366 // show, request focus, get focus in event which ends up clearing focus
380 // (first request to FocusManager::RestoreFocusedView ends up clearing focus). 367 // (first request to FocusManager::RestoreFocusedView ends up clearing focus).
381 bool got_initial_focus_in_; 368 bool got_initial_focus_in_;
382 369
383 // If true, we've received a focus-in event. If false we've received a 370 // If true, we've received a focus-in event. If false we've received a
384 // focus-out event. We can get multiple focus-out events in a row, we use 371 // focus-out event. We can get multiple focus-out events in a row, we use
385 // this to determine whether we should process the event. 372 // this to determine whether we should process the event.
386 bool has_focus_; 373 bool has_focus_;
387 374
375 // Whether we should SetFocus() on a newly created window after
376 // Init(). Defaults to true.
377 bool focus_on_creation_;
378
388 // If true, the window stays on top of the screen. This is only used 379 // If true, the window stays on top of the screen. This is only used
389 // for types other than TYPE_CHILD. 380 // for types other than TYPE_CHILD.
390 bool always_on_top_; 381 bool always_on_top_;
391 382
392 // If true, we enable the content widget's double buffering. 383 // If true, we enable the content widget's double buffering.
393 // This is false by default. 384 // This is false by default.
394 bool is_double_buffered_; 385 bool is_double_buffered_;
395 386
396 // Indicates if we should handle the upcoming Alt key release event. 387 // Indicates if we should handle the upcoming Alt key release event.
397 bool should_handle_menu_key_release_; 388 bool should_handle_menu_key_release_;
398 389
399 // Valid for the lifetime of StartDragForViewFromMouseEvent, indicates the 390 // Valid for the lifetime of StartDragForViewFromMouseEvent, indicates the
400 // view the drag started from. 391 // view the drag started from.
401 View* dragged_view_; 392 View* dragged_view_;
402 393
403 // If the widget has ever been painted. This is used to guarantee 394 // If the widget has ever been painted. This is used to guarantee
404 // that window manager shows the window only after the window is painted. 395 // that window manager shows the window only after the window is painted.
405 bool painted_; 396 bool painted_;
406 397
407 scoped_ptr<InputMethod> input_method_; 398 scoped_ptr<InputMethod> input_method_;
408 399
409 DISALLOW_COPY_AND_ASSIGN(WidgetGtk); 400 DISALLOW_COPY_AND_ASSIGN(WidgetGtk);
410 }; 401 };
411 402
412 } // namespace views 403 } // namespace views
413 404
414 #endif // VIEWS_WIDGET_WIDGET_GTK_H_ 405 #endif // VIEWS_WIDGET_WIDGET_GTK_H_
OLDNEW
« no previous file with comments | « views/widget/widget.cc ('k') | views/widget/widget_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698