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

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

Issue 149355: Make bookmark bar folder buttons look active so long as the menu is open.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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
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/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "app/resource_bundle.h" 10 #include "app/resource_bundle.h"
11 #include "base/gfx/gtk_util.h" 11 #include "base/gfx/gtk_util.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "chrome/browser/gtk/bookmark_context_menu.h" 13 #include "chrome/browser/gtk/bookmark_context_menu.h"
14 #include "chrome/browser/gtk/bookmark_utils_gtk.h" 14 #include "chrome/browser/gtk/bookmark_utils_gtk.h"
15 #include "chrome/browser/gtk/gtk_chrome_button.h"
15 #include "chrome/browser/gtk/gtk_dnd_util.h" 16 #include "chrome/browser/gtk/gtk_dnd_util.h"
16 #include "chrome/browser/gtk/gtk_theme_provider.h" 17 #include "chrome/browser/gtk/gtk_theme_provider.h"
17 #include "chrome/browser/gtk/menu_gtk.h" 18 #include "chrome/browser/gtk/menu_gtk.h"
18 #include "chrome/browser/profile.h" 19 #include "chrome/browser/profile.h"
19 #include "chrome/browser/tab_contents/page_navigator.h" 20 #include "chrome/browser/tab_contents/page_navigator.h"
20 #include "chrome/common/gtk_util.h" 21 #include "chrome/common/gtk_util.h"
21 #include "grit/app_resources.h" 22 #include "grit/app_resources.h"
22 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
23 #include "grit/theme_resources.h" 24 #include "grit/theme_resources.h"
24 #include "webkit/glue/window_open_disposition.h" 25 #include "webkit/glue/window_open_disposition.h"
(...skipping 23 matching lines...) Expand all
48 PageNavigator* navigator, 49 PageNavigator* navigator,
49 GtkWindow* window, 50 GtkWindow* window,
50 const BookmarkNode* node, 51 const BookmarkNode* node,
51 int start_child_index, 52 int start_child_index,
52 bool show_other_folder) 53 bool show_other_folder)
53 : browser_(browser), 54 : browser_(browser),
54 profile_(profile), 55 profile_(profile),
55 page_navigator_(navigator), 56 page_navigator_(navigator),
56 parent_window_(window), 57 parent_window_(window),
57 node_(node), 58 node_(node),
58 ignore_button_release_(false) { 59 ignore_button_release_(false),
60 triggering_widget_(NULL) {
59 menu_.Own(gtk_menu_new()); 61 menu_.Own(gtk_menu_new());
60 BuildMenu(node, start_child_index, menu_.get()); 62 BuildMenu(node, start_child_index, menu_.get());
63 g_signal_connect(menu_.get(), "hide",
64 G_CALLBACK(OnMenuHidden), this);
61 gtk_widget_show_all(menu_.get()); 65 gtk_widget_show_all(menu_.get());
62 } 66 }
63 67
64 BookmarkMenuController::~BookmarkMenuController() { 68 BookmarkMenuController::~BookmarkMenuController() {
65 profile_->GetBookmarkModel()->RemoveObserver(this); 69 profile_->GetBookmarkModel()->RemoveObserver(this);
66 menu_.Destroy(); 70 menu_.Destroy();
67 } 71 }
68 72
69 void BookmarkMenuController::Popup(GtkWidget* widget, gint button_type, 73 void BookmarkMenuController::Popup(GtkWidget* widget, gint button_type,
70 guint32 timestamp) { 74 guint32 timestamp) {
71 profile_->GetBookmarkModel()->AddObserver(this); 75 profile_->GetBookmarkModel()->AddObserver(this);
72 76
77 triggering_widget_ = widget;
78 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(widget),
79 GTK_STATE_ACTIVE);
73 gtk_menu_popup(GTK_MENU(menu_.get()), NULL, NULL, 80 gtk_menu_popup(GTK_MENU(menu_.get()), NULL, NULL,
74 &MenuGtk::MenuPositionFunc, 81 &MenuGtk::MenuPositionFunc,
75 widget, button_type, timestamp); 82 widget, button_type, timestamp);
76 } 83 }
77 84
78 void BookmarkMenuController::BookmarkModelChanged() { 85 void BookmarkMenuController::BookmarkModelChanged() {
79 gtk_menu_popdown(GTK_MENU(menu_.get())); 86 gtk_menu_popdown(GTK_MENU(menu_.get()));
80 } 87 }
81 88
82 void BookmarkMenuController::BookmarkNodeFavIconLoaded( 89 void BookmarkMenuController::BookmarkNodeFavIconLoaded(
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 } 157 }
151 158
152 if (parent->GetChildCount() == 0) { 159 if (parent->GetChildCount() == 0) {
153 GtkWidget* empty_menu = gtk_menu_item_new_with_label( 160 GtkWidget* empty_menu = gtk_menu_item_new_with_label(
154 l10n_util::GetStringUTF8(IDS_MENU_EMPTY_SUBMENU).c_str()); 161 l10n_util::GetStringUTF8(IDS_MENU_EMPTY_SUBMENU).c_str());
155 gtk_widget_set_sensitive(empty_menu, FALSE); 162 gtk_widget_set_sensitive(empty_menu, FALSE);
156 gtk_menu_shell_append(GTK_MENU_SHELL(menu), empty_menu); 163 gtk_menu_shell_append(GTK_MENU_SHELL(menu), empty_menu);
157 } 164 }
158 } 165 }
159 166
167 // static
160 gboolean BookmarkMenuController::OnButtonPressed( 168 gboolean BookmarkMenuController::OnButtonPressed(
161 GtkWidget* sender, 169 GtkWidget* sender,
162 GdkEventButton* event, 170 GdkEventButton* event,
163 BookmarkMenuController* controller) { 171 BookmarkMenuController* controller) {
164 controller->ignore_button_release_ = false; 172 controller->ignore_button_release_ = false;
165 173
166 if (event->button == 3) { 174 if (event->button == 3) {
167 // Show the right click menu and stop processing this button event. 175 // Show the right click menu and stop processing this button event.
168 const BookmarkNode* node = GetNodeFromMenuItem(sender); 176 const BookmarkNode* node = GetNodeFromMenuItem(sender);
169 const BookmarkNode* parent = node->GetParent(); 177 const BookmarkNode* parent = node->GetParent();
170 std::vector<const BookmarkNode*> nodes; 178 std::vector<const BookmarkNode*> nodes;
171 nodes.push_back(node); 179 nodes.push_back(node);
172 controller->context_menu_.reset( 180 controller->context_menu_.reset(
173 new BookmarkContextMenu( 181 new BookmarkContextMenu(
174 sender, controller->profile_, controller->browser_, 182 sender, controller->profile_, controller->browser_,
175 controller->page_navigator_, parent, nodes, 183 controller->page_navigator_, parent, nodes,
176 BookmarkContextMenu::BOOKMARK_BAR)); 184 BookmarkContextMenu::BOOKMARK_BAR));
177 controller->context_menu_->PopupAsContext(event->time); 185 controller->context_menu_->PopupAsContext(event->time);
178 return TRUE; 186 return TRUE;
179 } 187 }
180 188
181 return FALSE; 189 return FALSE;
182 } 190 }
183 191
192 // static
184 gboolean BookmarkMenuController::OnButtonReleased( 193 gboolean BookmarkMenuController::OnButtonReleased(
185 GtkWidget* sender, 194 GtkWidget* sender,
186 GdkEventButton* event, 195 GdkEventButton* event,
187 BookmarkMenuController* controller) { 196 BookmarkMenuController* controller) {
188 if (controller->ignore_button_release_) { 197 if (controller->ignore_button_release_) {
189 // Don't handle this message; it was a drag. 198 // Don't handle this message; it was a drag.
190 controller->ignore_button_release_ = false; 199 controller->ignore_button_release_ = false;
191 return FALSE; 200 return FALSE;
192 } 201 }
193 202
194 // Releasing either button 1 or 2 should trigger the bookmark menu. 203 // Releasing either button 1 or 2 should trigger the bookmark menu.
195 if (event->button == 1 || event->button == 2) { 204 if (event->button == 1 || event->button == 2) {
196 WindowOpenDisposition disposition = 205 WindowOpenDisposition disposition =
197 event_utils::DispositionFromEventFlags(event->state); 206 event_utils::DispositionFromEventFlags(event->state);
198 controller->NavigateToMenuItem(sender, disposition); 207 controller->NavigateToMenuItem(sender, disposition);
199 208
200 // We need to manually dismiss the popup menu because we're overriding 209 // We need to manually dismiss the popup menu because we're overriding
201 // button-release-event. 210 // button-release-event.
202 gtk_menu_popdown(GTK_MENU(controller->menu_.get())); 211 gtk_menu_popdown(GTK_MENU(controller->menu_.get()));
203 return TRUE; 212 return TRUE;
204 } 213 }
205 214
206 return FALSE; 215 return FALSE;
207 } 216 }
208 217
218 // static
219 void BookmarkMenuController::OnMenuHidden(GtkWidget* menu,
220 BookmarkMenuController* controller) {
221 if (controller->triggering_widget_) {
222 gtk_chrome_button_unset_paint_state(
223 GTK_CHROME_BUTTON(controller->triggering_widget_));
224 }
225 }
226
227 // static
209 void BookmarkMenuController::OnMenuItemActivated( 228 void BookmarkMenuController::OnMenuItemActivated(
210 GtkMenuItem* menu_item, BookmarkMenuController* controller) { 229 GtkMenuItem* menu_item, BookmarkMenuController* controller) {
211 controller->NavigateToMenuItem(GTK_WIDGET(menu_item), CURRENT_TAB); 230 controller->NavigateToMenuItem(GTK_WIDGET(menu_item), CURRENT_TAB);
212 } 231 }
213 232
214 // static 233 // static
215 void BookmarkMenuController::OnMenuItemDragBegin( 234 void BookmarkMenuController::OnMenuItemDragBegin(
216 GtkWidget* menu_item, 235 GtkWidget* menu_item,
217 GdkDragContext* drag_context, 236 GdkDragContext* drag_context,
218 BookmarkMenuController* controller) { 237 BookmarkMenuController* controller) {
(...skipping 29 matching lines...) Expand all
248 // static 267 // static
249 void BookmarkMenuController::OnMenuItemDragGet( 268 void BookmarkMenuController::OnMenuItemDragGet(
250 GtkWidget* widget, GdkDragContext* context, 269 GtkWidget* widget, GdkDragContext* context,
251 GtkSelectionData* selection_data, 270 GtkSelectionData* selection_data,
252 guint target_type, guint time, 271 guint target_type, guint time,
253 BookmarkMenuController* controller) { 272 BookmarkMenuController* controller) {
254 const BookmarkNode* node = bookmark_utils::BookmarkNodeForWidget(widget); 273 const BookmarkNode* node = bookmark_utils::BookmarkNodeForWidget(widget);
255 bookmark_utils::WriteBookmarkToSelection(node, selection_data, target_type, 274 bookmark_utils::WriteBookmarkToSelection(node, selection_data, target_type,
256 controller->profile_); 275 controller->profile_);
257 } 276 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_menu_controller_gtk.h ('k') | chrome/browser/gtk/gtk_chrome_button.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698