Index: views/widget/widget.h |
=================================================================== |
--- views/widget/widget.h (revision 85284) |
+++ views/widget/widget.h (working copy) |
@@ -52,13 +52,21 @@ |
// Widget is a platform-independent type that communicates with a platform or |
// context specific NativeWidget implementation. |
// |
-// TODO(beng): Note that this class being non-abstract means that we have a |
-// violation of Google style in that we are using multiple |
-// inheritance. The intention is to split this into a separate |
-// object associated with but not equal to a NativeWidget |
-// implementation. Multiple inheritance is required for this |
-// transitional step. |
+// A special note on ownership: |
// |
+// Depending on the value of "delete_on_destroy", the Widget either owns or |
+// is owned by its NativeWidget: |
+// |
+// delete_on_destroy = true (default) |
+// The Widget instance is owned by its NativeWidget. When the NativeWidget |
+// is destroyed (in response to a native destruction message), it deletes |
+// the Widget from its destructor. |
+// delete_on_destroy = false (non-default) |
+// The Widget instance owns its NativeWidget. This state implies someone |
+// else wants to control the lifetime of this object. When they destroy |
+// the Widget it is responsible for destroying the NativeWidget (from its |
+// destructor). |
+// |
class Widget : public internal::NativeWidgetDelegate, |
public FocusTraversable { |
public: |
@@ -76,6 +84,7 @@ |
Type type; |
bool child; |
+ bool transient; |
bool transparent; |
bool accept_events; |
bool can_activate; |
@@ -95,13 +104,14 @@ |
Widget(); |
virtual ~Widget(); |
- // Creates a Widget instance with the supplied params. |
- static Widget* CreateWidget(); |
- |
// Enumerates all windows pertaining to us and notifies their |
// view hierarchies that the locale has changed. |
static void NotifyLocaleChanged(); |
+ // Closes all Widgets that aren't identified as "secondary widgets". Called |
+ // during application shutdown when the last non-secondary widget is closed. |
+ static void CloseAllSecondaryWidgets(); |
+ |
// Converts a rectangle from one Widget's coordinate system to another's. |
// Returns false if the conversion couldn't be made, because either these two |
// Widgets do not have a common ancestor or they are not on the screen yet. |
@@ -114,38 +124,31 @@ |
// Unconverted methods ------------------------------------------------------- |
- // TODO(beng): |
- // Widget subclasses are still implementing these methods by overriding from |
- // here rather than by implementing NativeWidget. |
+ // TODO(beng): reorder, they've been converted now. |
// Returns the gfx::NativeView associated with this Widget. |
- virtual gfx::NativeView GetNativeView() const; |
+ gfx::NativeView GetNativeView() const; |
// Returns the gfx::NativeWindow associated with this Widget. This may return |
// NULL on some platforms if the widget was created with a type other than |
// TYPE_WINDOW. |
- virtual gfx::NativeWindow GetNativeWindow() const; |
+ gfx::NativeWindow GetNativeWindow() const; |
- // Starts a drag operation for the specified view. |point| is a position in |
- // |view| coordinates that the drag was initiated from. |
- virtual void GenerateMousePressedForView(View* view, |
- const gfx::Point& point); |
- |
// Returns the accelerator given a command id. Returns false if there is |
// no accelerator associated with a given id, which is a common condition. |
virtual bool GetAccelerator(int cmd_id, ui::Accelerator* accelerator); |
// Returns the Window containing this Widget, or NULL if not contained in a |
// window. |
- virtual Window* GetWindow(); |
- virtual const Window* GetWindow() const; |
+ Window* GetContainingWindow(); |
+ const Window* GetContainingWindow() const; |
// Forwarded from the RootView so that the widget can do any cleanup. |
- virtual void ViewHierarchyChanged(bool is_add, View* parent, View* child); |
+ void ViewHierarchyChanged(bool is_add, View* parent, View* child); |
// Performs any necessary cleanup and forwards to RootView. |
- virtual void NotifyNativeViewHierarchyChanged(bool attached, |
- gfx::NativeView native_view); |
+ void NotifyNativeViewHierarchyChanged(bool attached, |
+ gfx::NativeView native_view); |
// Converted methods --------------------------------------------------------- |
@@ -188,7 +191,7 @@ |
void SetShape(gfx::NativeRegion shape); |
// Hides the widget then closes it after a return to the message loop. |
- void Close(); |
+ virtual void Close(); |
// TODO(beng): Move off public API. |
// Closes the widget immediately. Compare to |Close|. This will destroy the |
@@ -212,6 +215,16 @@ |
// Returns the RootView contained by this Widget. |
RootView* GetRootView(); |
+ // A secondary widget is one that is automatically closed (via Close()) when |
+ // all non-secondary widgets are closed. |
+ // Default is true. |
+ // TODO(beng): This is an ugly API, should be handled implicitly via |
+ // transience. |
+ void set_is_secondary_widget(bool is_secondary_widget) { |
+ is_secondary_widget_ = is_secondary_widget; |
+ } |
+ bool is_secondary_widget() const { return is_secondary_widget_; } |
+ |
// Returns whether the Widget is visible to the user. |
bool IsVisible() const; |
@@ -257,6 +270,12 @@ |
// before the current is restored. |
void SetCursor(gfx::NativeCursor cursor); |
+ // Resets the last move flag so that we can go around the optimization |
+ // that disregards duplicate mouse moves when ending animation requires |
+ // a new hit-test to do some highlighting as in TabStrip::RemoveTabAnimation |
+ // to cause the close button to highlight. |
+ void ResetLastMouseMoveFlag(); |
+ |
// Retrieves the focus traversable for this widget. |
FocusTraversable* GetFocusTraversable(); |
@@ -280,10 +299,10 @@ |
// cases where the view is a native control that's already sending a |
// native accessibility event and the duplicate event would cause |
// problems. |
- virtual void NotifyAccessibilityEvent( |
+ void NotifyAccessibilityEvent( |
View* view, |
ui::AccessibilityTypes::Event event_type, |
- bool send_native_event) = 0; |
+ bool send_native_event); |
NativeWidget* native_widget() { return native_widget_; } |
@@ -299,6 +318,8 @@ |
virtual bool OnKeyEvent(const KeyEvent& event) OVERRIDE; |
virtual bool OnMouseEvent(const MouseEvent& event) OVERRIDE; |
virtual void OnMouseCaptureLost() OVERRIDE; |
+ virtual Widget* AsWidget() OVERRIDE; |
+ virtual const Widget* AsWidget() const OVERRIDE; |
// Overridden from FocusTraversable: |
virtual FocusSearch* GetFocusSearch() OVERRIDE; |
@@ -306,6 +327,9 @@ |
virtual View* GetFocusTraversableParentView() OVERRIDE; |
protected: |
+ // TODO(beng): Remove WidgetGtk's dependence on the mouse state flags. |
+ friend class WidgetGtk; |
+ |
// Creates the RootView to be used within this Widget. Subclasses may override |
// to create custom RootViews that do specialized event processing. |
// TODO(beng): Investigate whether or not this is needed. |
@@ -316,19 +340,15 @@ |
// TODO(beng): remove once we fold those objects onto this one. |
void DestroyRootView(); |
- // TODO(beng): Temporarily provided as a way to associate the subclass' |
- // implementation of NativeWidget with this. |
- void set_native_widget(NativeWidget* native_widget) { |
- native_widget_ = native_widget; |
- } |
- |
// Used for testing. |
void ReplaceFocusManager(FocusManager* focus_manager); |
+ // TODO(beng): Remove WidgetGtk's dependence on these: |
// TODO(msw): Make this mouse state member private. |
// If true, the mouse is currently down. |
bool is_mouse_button_pressed_; |
+ // TODO(beng): Remove WidgetGtk's dependence on these: |
// TODO(msw): Make these mouse state members private. |
// The following are used to detect duplicate mouse move events and not |
// deliver them. Displaying a window may result in the system generating |
@@ -370,6 +390,12 @@ |
// The compositor for accelerated drawing. |
scoped_refptr<ui::Compositor> compositor_; |
+ // See class documentation for Widget above for a note about ownership. |
+ bool delete_on_destroy_; |
+ |
+ // See set_is_secondary_widget(). |
+ bool is_secondary_widget_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Widget); |
}; |