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

Side by Side Diff: chrome/browser/gtk/bookmark_menu_controller_gtk.cc

Issue 211056: GTK: Dismiss the bookmark folder menu(s) when a context menu item is executed... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 3 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 | « chrome/browser/gtk/bookmark_menu_controller_gtk.h ('k') | no next file » | 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #include "chrome/browser/gtk/bookmark_menu_controller_gtk.h" 5 #include "chrome/browser/gtk/bookmark_menu_controller_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "app/gtk_dnd_util.h" 9 #include "app/gtk_dnd_util.h"
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 ignore_button_release_(false), 98 ignore_button_release_(false),
99 triggering_widget_(NULL) { 99 triggering_widget_(NULL) {
100 menu_ = gtk_menu_new(); 100 menu_ = gtk_menu_new();
101 BuildMenu(node, start_child_index, menu_); 101 BuildMenu(node, start_child_index, menu_);
102 g_signal_connect(menu_, "hide", 102 g_signal_connect(menu_, "hide",
103 G_CALLBACK(OnMenuHidden), this); 103 G_CALLBACK(OnMenuHidden), this);
104 gtk_widget_show_all(menu_); 104 gtk_widget_show_all(menu_);
105 } 105 }
106 106
107 BookmarkMenuController::~BookmarkMenuController() { 107 BookmarkMenuController::~BookmarkMenuController() {
108
109 if (context_menu_.get())
110 context_menu_->DelegateDestroyed();
108 profile_->GetBookmarkModel()->RemoveObserver(this); 111 profile_->GetBookmarkModel()->RemoveObserver(this);
109 gtk_menu_popdown(GTK_MENU(menu_)); 112 gtk_menu_popdown(GTK_MENU(menu_));
110 } 113 }
111 114
112 void BookmarkMenuController::Popup(GtkWidget* widget, gint button_type, 115 void BookmarkMenuController::Popup(GtkWidget* widget, gint button_type,
113 guint32 timestamp) { 116 guint32 timestamp) {
114 profile_->GetBookmarkModel()->AddObserver(this); 117 profile_->GetBookmarkModel()->AddObserver(this);
115 118
116 triggering_widget_ = widget; 119 triggering_widget_ = widget;
117 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(widget), 120 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(widget),
118 GTK_STATE_ACTIVE); 121 GTK_STATE_ACTIVE);
119 gtk_menu_popup(GTK_MENU(menu_), NULL, NULL, 122 gtk_menu_popup(GTK_MENU(menu_), NULL, NULL,
120 &MenuGtk::MenuPositionFunc, 123 &MenuGtk::MenuPositionFunc,
121 widget, button_type, timestamp); 124 widget, button_type, timestamp);
122 } 125 }
123 126
124 void BookmarkMenuController::BookmarkModelChanged() { 127 void BookmarkMenuController::BookmarkModelChanged() {
125 gtk_menu_popdown(GTK_MENU(menu_)); 128 gtk_menu_popdown(GTK_MENU(menu_));
126 } 129 }
127 130
128 void BookmarkMenuController::BookmarkNodeFavIconLoaded( 131 void BookmarkMenuController::BookmarkNodeFavIconLoaded(
129 BookmarkModel* model, const BookmarkNode* node) { 132 BookmarkModel* model, const BookmarkNode* node) {
130 std::map<const BookmarkNode*, GtkWidget*>::iterator it = 133 std::map<const BookmarkNode*, GtkWidget*>::iterator it =
131 node_to_menu_widget_map_.find(node); 134 node_to_menu_widget_map_.find(node);
132 if (it != node_to_menu_widget_map_.end()) 135 if (it != node_to_menu_widget_map_.end())
133 SetImageMenuItem(it->second, node, model); 136 SetImageMenuItem(it->second, node, model);
134 } 137 }
135 138
139 void BookmarkMenuController::WillExecuteCommand() {
140 gtk_menu_popdown(GTK_MENU(menu_));
141 }
142
136 void BookmarkMenuController::NavigateToMenuItem( 143 void BookmarkMenuController::NavigateToMenuItem(
137 GtkWidget* menu_item, 144 GtkWidget* menu_item,
138 WindowOpenDisposition disposition) { 145 WindowOpenDisposition disposition) {
139 const BookmarkNode* node = GetNodeFromMenuItem(menu_item); 146 const BookmarkNode* node = GetNodeFromMenuItem(menu_item);
140 DCHECK(node); 147 DCHECK(node);
141 DCHECK(page_navigator_); 148 DCHECK(page_navigator_);
142 page_navigator_->OpenURL( 149 page_navigator_->OpenURL(
143 node->GetURL(), GURL(), disposition, PageTransition::AUTO_BOOKMARK); 150 node->GetURL(), GURL(), disposition, PageTransition::AUTO_BOOKMARK);
144 } 151 }
145 152
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 parent = node->GetParent(); 245 parent = node->GetParent();
239 246
240 // Show the right click menu and stop processing this button event. 247 // Show the right click menu and stop processing this button event.
241 std::vector<const BookmarkNode*> nodes; 248 std::vector<const BookmarkNode*> nodes;
242 if (node) 249 if (node)
243 nodes.push_back(node); 250 nodes.push_back(node);
244 controller->context_menu_.reset( 251 controller->context_menu_.reset(
245 new BookmarkContextMenu( 252 new BookmarkContextMenu(
246 GTK_WIDGET(controller->parent_window_), controller->profile_, 253 GTK_WIDGET(controller->parent_window_), controller->profile_,
247 controller->browser_, controller->page_navigator_, parent, nodes, 254 controller->browser_, controller->page_navigator_, parent, nodes,
248 BookmarkContextMenu::BOOKMARK_BAR)); 255 BookmarkContextMenu::BOOKMARK_BAR, controller));
249 256
250 // Our bookmark folder menu loses the grab to the context menu. When the 257 // Our bookmark folder menu loses the grab to the context menu. When the
251 // context menu is hidden, re-assert our grab. 258 // context menu is hidden, re-assert our grab.
252 GtkWidget* grabbing_menu = gtk_grab_get_current(); 259 GtkWidget* grabbing_menu = gtk_grab_get_current();
253 g_object_ref(grabbing_menu); 260 g_object_ref(grabbing_menu);
254 g_signal_connect(controller->context_menu_->menu(), "hide", 261 g_signal_connect(controller->context_menu_->menu(), "hide",
255 G_CALLBACK(OnContextMenuHide), grabbing_menu); 262 G_CALLBACK(OnContextMenuHide), grabbing_menu);
256 263
257 controller->context_menu_->PopupAsContext(event->time); 264 controller->context_menu_->PopupAsContext(event->time);
258 return TRUE; 265 return TRUE;
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // static 346 // static
340 void BookmarkMenuController::OnMenuItemDragGet( 347 void BookmarkMenuController::OnMenuItemDragGet(
341 GtkWidget* widget, GdkDragContext* context, 348 GtkWidget* widget, GdkDragContext* context,
342 GtkSelectionData* selection_data, 349 GtkSelectionData* selection_data,
343 guint target_type, guint time, 350 guint target_type, guint time,
344 BookmarkMenuController* controller) { 351 BookmarkMenuController* controller) {
345 const BookmarkNode* node = bookmark_utils::BookmarkNodeForWidget(widget); 352 const BookmarkNode* node = bookmark_utils::BookmarkNodeForWidget(widget);
346 bookmark_utils::WriteBookmarkToSelection(node, selection_data, target_type, 353 bookmark_utils::WriteBookmarkToSelection(node, selection_data, target_type,
347 controller->profile_); 354 controller->profile_);
348 } 355 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_menu_controller_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698