OLD | NEW |
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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 const BookmarkNode* node, | 90 const BookmarkNode* node, |
91 int start_child_index, | 91 int start_child_index, |
92 bool show_other_folder) | 92 bool show_other_folder) |
93 : browser_(browser), | 93 : browser_(browser), |
94 profile_(profile), | 94 profile_(profile), |
95 page_navigator_(navigator), | 95 page_navigator_(navigator), |
96 parent_window_(window), | 96 parent_window_(window), |
97 node_(node), | 97 node_(node), |
98 ignore_button_release_(false), | 98 ignore_button_release_(false), |
99 triggering_widget_(NULL) { | 99 triggering_widget_(NULL) { |
100 menu_.Own(gtk_menu_new()); | 100 menu_ = gtk_menu_new(); |
101 BuildMenu(node, start_child_index, menu_.get()); | 101 BuildMenu(node, start_child_index, menu_); |
102 g_signal_connect(menu_.get(), "hide", | 102 g_signal_connect(menu_, "hide", |
103 G_CALLBACK(OnMenuHidden), this); | 103 G_CALLBACK(OnMenuHidden), this); |
104 gtk_widget_show_all(menu_.get()); | 104 gtk_widget_show_all(menu_); |
105 } | 105 } |
106 | 106 |
107 BookmarkMenuController::~BookmarkMenuController() { | 107 BookmarkMenuController::~BookmarkMenuController() { |
108 profile_->GetBookmarkModel()->RemoveObserver(this); | 108 profile_->GetBookmarkModel()->RemoveObserver(this); |
109 menu_.Destroy(); | 109 gtk_menu_popdown(GTK_MENU(menu_)); |
110 } | 110 } |
111 | 111 |
112 void BookmarkMenuController::Popup(GtkWidget* widget, gint button_type, | 112 void BookmarkMenuController::Popup(GtkWidget* widget, gint button_type, |
113 guint32 timestamp) { | 113 guint32 timestamp) { |
114 profile_->GetBookmarkModel()->AddObserver(this); | 114 profile_->GetBookmarkModel()->AddObserver(this); |
115 | 115 |
116 triggering_widget_ = widget; | 116 triggering_widget_ = widget; |
117 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(widget), | 117 gtk_chrome_button_set_paint_state(GTK_CHROME_BUTTON(widget), |
118 GTK_STATE_ACTIVE); | 118 GTK_STATE_ACTIVE); |
119 gtk_menu_popup(GTK_MENU(menu_.get()), NULL, NULL, | 119 gtk_menu_popup(GTK_MENU(menu_), NULL, NULL, |
120 &MenuGtk::MenuPositionFunc, | 120 &MenuGtk::MenuPositionFunc, |
121 widget, button_type, timestamp); | 121 widget, button_type, timestamp); |
122 } | 122 } |
123 | 123 |
124 void BookmarkMenuController::BookmarkModelChanged() { | 124 void BookmarkMenuController::BookmarkModelChanged() { |
125 gtk_menu_popdown(GTK_MENU(menu_.get())); | 125 gtk_menu_popdown(GTK_MENU(menu_)); |
126 } | 126 } |
127 | 127 |
128 void BookmarkMenuController::BookmarkNodeFavIconLoaded( | 128 void BookmarkMenuController::BookmarkNodeFavIconLoaded( |
129 BookmarkModel* model, const BookmarkNode* node) { | 129 BookmarkModel* model, const BookmarkNode* node) { |
130 std::map<const BookmarkNode*, GtkWidget*>::iterator it = | 130 std::map<const BookmarkNode*, GtkWidget*>::iterator it = |
131 node_to_menu_widget_map_.find(node); | 131 node_to_menu_widget_map_.find(node); |
132 if (it != node_to_menu_widget_map_.end()) | 132 if (it != node_to_menu_widget_map_.end()) |
133 SetImageMenuItem(it->second, node, model); | 133 SetImageMenuItem(it->second, node, model); |
134 } | 134 } |
135 | 135 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 } | 272 } |
273 | 273 |
274 // Releasing either button 1 or 2 should trigger the bookmark menu. | 274 // Releasing either button 1 or 2 should trigger the bookmark menu. |
275 if (event->button == 1 || event->button == 2) { | 275 if (event->button == 1 || event->button == 2) { |
276 WindowOpenDisposition disposition = | 276 WindowOpenDisposition disposition = |
277 event_utils::DispositionFromEventFlags(event->state); | 277 event_utils::DispositionFromEventFlags(event->state); |
278 controller->NavigateToMenuItem(sender, disposition); | 278 controller->NavigateToMenuItem(sender, disposition); |
279 | 279 |
280 // We need to manually dismiss the popup menu because we're overriding | 280 // We need to manually dismiss the popup menu because we're overriding |
281 // button-release-event. | 281 // button-release-event. |
282 gtk_menu_popdown(GTK_MENU(controller->menu_.get())); | 282 gtk_menu_popdown(GTK_MENU(controller->menu_)); |
283 return TRUE; | 283 return TRUE; |
284 } | 284 } |
285 | 285 |
286 return FALSE; | 286 return FALSE; |
287 } | 287 } |
288 | 288 |
289 // static | 289 // static |
290 void BookmarkMenuController::OnMenuHidden(GtkWidget* menu, | 290 void BookmarkMenuController::OnMenuHidden(GtkWidget* menu, |
291 BookmarkMenuController* controller) { | 291 BookmarkMenuController* controller) { |
292 if (controller->triggering_widget_) { | 292 if (controller->triggering_widget_) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 // static | 338 // static |
339 void BookmarkMenuController::OnMenuItemDragGet( | 339 void BookmarkMenuController::OnMenuItemDragGet( |
340 GtkWidget* widget, GdkDragContext* context, | 340 GtkWidget* widget, GdkDragContext* context, |
341 GtkSelectionData* selection_data, | 341 GtkSelectionData* selection_data, |
342 guint target_type, guint time, | 342 guint target_type, guint time, |
343 BookmarkMenuController* controller) { | 343 BookmarkMenuController* controller) { |
344 const BookmarkNode* node = bookmark_utils::BookmarkNodeForWidget(widget); | 344 const BookmarkNode* node = bookmark_utils::BookmarkNodeForWidget(widget); |
345 bookmark_utils::WriteBookmarkToSelection(node, selection_data, target_type, | 345 bookmark_utils::WriteBookmarkToSelection(node, selection_data, target_type, |
346 controller->profile_); | 346 controller->profile_); |
347 } | 347 } |
OLD | NEW |