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

Side by Side Diff: views/controls/menu/submenu_view.h

Issue 1664001: Fixes possible crash if the window hosting a menu was closed while the (Closed)
Patch Set: Incorporated review feedback Created 10 years, 8 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
« no previous file with comments | « views/controls/menu/menu_item_view.cc ('k') | views/controls/menu/submenu_view.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_CONTROLS_MENU_SUBMENU_VIEW_H_ 5 #ifndef VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_
6 #define VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_ 6 #define VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_
7 7
8 #include "views/controls/menu/menu_delegate.h" 8 #include "views/controls/menu/menu_delegate.h"
9 #include "views/view.h" 9 #include "views/view.h"
10 10
11 namespace views { 11 namespace views {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 // The selection is NOT shown during drag and drop when the drop is over 111 // The selection is NOT shown during drag and drop when the drop is over
112 // the menu. 112 // the menu.
113 bool GetShowSelection(MenuItemView* item); 113 bool GetShowSelection(MenuItemView* item);
114 114
115 // Returns the container for the SubmenuView. 115 // Returns the container for the SubmenuView.
116 MenuScrollViewContainer* GetScrollViewContainer(); 116 MenuScrollViewContainer* GetScrollViewContainer();
117 117
118 // Returns the NativeWindow host of the menu, or NULL if not showing. 118 // Returns the NativeWindow host of the menu, or NULL if not showing.
119 gfx::NativeWindow native_window() const; 119 gfx::NativeWindow native_window() const;
120 120
121 // Invoked if the menu is prematurely destroyed. This can happen if the window
122 // closes while the menu is shown. If invoked the SubmenuView must drop all
123 // references to the MenuHost as the MenuHost is about to be deleted.
124 void MenuHostDestroyed();
125
121 // Padding around the edges of the submenu. 126 // Padding around the edges of the submenu.
122 static const int kSubmenuBorderSize; 127 static const int kSubmenuBorderSize;
123 128
124 private: 129 private:
125 // Paints the drop indicator. This is only invoked if item is non-NULL and 130 // Paints the drop indicator. This is only invoked if item is non-NULL and
126 // position is not DROP_NONE. 131 // position is not DROP_NONE.
127 void PaintDropIndicator(gfx::Canvas* canvas, 132 void PaintDropIndicator(gfx::Canvas* canvas,
128 MenuItemView* item, 133 MenuItemView* item,
129 MenuDelegate::DropPosition position); 134 MenuDelegate::DropPosition position);
130 135
131 void SchedulePaintForDropIndicator(MenuItemView* item, 136 void SchedulePaintForDropIndicator(MenuItemView* item,
132 MenuDelegate::DropPosition position); 137 MenuDelegate::DropPosition position);
133 138
134 // Calculates the location of th edrop indicator. 139 // Calculates the location of th edrop indicator.
135 gfx::Rect CalculateDropIndicatorBounds(MenuItemView* item, 140 gfx::Rect CalculateDropIndicatorBounds(MenuItemView* item,
136 MenuDelegate::DropPosition position); 141 MenuDelegate::DropPosition position);
137 142
138 // Parent menu item. 143 // Parent menu item.
139 MenuItemView* parent_menu_item_; 144 MenuItemView* parent_menu_item_;
140 145
141 // Widget subclass used to show the children. 146 // Widget subclass used to show the children. This is deleted when we invoke
147 // |DestroyMenuHost|, or |MenuHostDestroyed| is invoked back on us.
142 MenuHost* host_; 148 MenuHost* host_;
143 149
144 // If non-null, indicates a drop is in progress and drop_item is the item 150 // If non-null, indicates a drop is in progress and drop_item is the item
145 // the drop is over. 151 // the drop is over.
146 MenuItemView* drop_item_; 152 MenuItemView* drop_item_;
147 153
148 // Position of the drop. 154 // Position of the drop.
149 MenuDelegate::DropPosition drop_position_; 155 MenuDelegate::DropPosition drop_position_;
150 156
151 // Ancestor of the SubmenuView, lazily created. 157 // Ancestor of the SubmenuView, lazily created.
152 MenuScrollViewContainer* scroll_view_container_; 158 MenuScrollViewContainer* scroll_view_container_;
153 159
154 DISALLOW_COPY_AND_ASSIGN(SubmenuView); 160 DISALLOW_COPY_AND_ASSIGN(SubmenuView);
155 }; 161 };
156 162
157 } // namespace views 163 } // namespace views
158 164
159 #endif // VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_ 165 #endif // VIEWS_CONTROLS_MENU_SUBMENU_VIEW_H_
OLDNEW
« no previous file with comments | « views/controls/menu/menu_item_view.cc ('k') | views/controls/menu/submenu_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698