OLD | NEW |
1 // Copyright (c) 2010 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 CHROME_BROWSER_GTK_BROWSER_TOOLBAR_GTK_H_ | 5 #ifndef CHROME_BROWSER_GTK_BROWSER_TOOLBAR_GTK_H_ |
6 #define CHROME_BROWSER_GTK_BROWSER_TOOLBAR_GTK_H_ | 6 #define CHROME_BROWSER_GTK_BROWSER_TOOLBAR_GTK_H_ |
7 | 7 |
8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
9 #include <string> | 9 #include <string> |
10 | 10 |
| 11 #include "app/active_window_watcher_x.h" |
11 #include "app/gtk_signal.h" | 12 #include "app/gtk_signal.h" |
12 #include "app/menus/simple_menu_model.h" | 13 #include "app/menus/simple_menu_model.h" |
13 #include "app/throb_animation.h" | 14 #include "app/throb_animation.h" |
14 #include "base/scoped_ptr.h" | 15 #include "base/scoped_ptr.h" |
15 #include "chrome/browser/app_menu_model.h" | 16 #include "chrome/browser/app_menu_model.h" |
16 #include "chrome/browser/command_updater.h" | 17 #include "chrome/browser/command_updater.h" |
17 #include "chrome/browser/gtk/custom_button.h" | 18 #include "chrome/browser/gtk/custom_button.h" |
18 #include "chrome/browser/gtk/menu_bar_helper.h" | 19 #include "chrome/browser/gtk/menu_bar_helper.h" |
19 #include "chrome/browser/gtk/menu_gtk.h" | 20 #include "chrome/browser/gtk/menu_gtk.h" |
20 #include "chrome/browser/page_menu_model.h" | 21 #include "chrome/browser/page_menu_model.h" |
(...skipping 16 matching lines...) Expand all Loading... |
37 class TabContents; | 38 class TabContents; |
38 class ToolbarModel; | 39 class ToolbarModel; |
39 | 40 |
40 // View class that displays the GTK version of the toolbar and routes gtk | 41 // View class that displays the GTK version of the toolbar and routes gtk |
41 // events back to the Browser. | 42 // events back to the Browser. |
42 class BrowserToolbarGtk : public CommandUpdater::CommandObserver, | 43 class BrowserToolbarGtk : public CommandUpdater::CommandObserver, |
43 public menus::SimpleMenuModel::Delegate, | 44 public menus::SimpleMenuModel::Delegate, |
44 public MenuGtk::Delegate, | 45 public MenuGtk::Delegate, |
45 public NotificationObserver, | 46 public NotificationObserver, |
46 public MenuBarHelper::Delegate, | 47 public MenuBarHelper::Delegate, |
47 public AnimationDelegate { | 48 public AnimationDelegate, |
| 49 public ActiveWindowWatcherX::Observer { |
48 public: | 50 public: |
49 explicit BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window); | 51 explicit BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window); |
50 virtual ~BrowserToolbarGtk(); | 52 virtual ~BrowserToolbarGtk(); |
51 | 53 |
52 // Create the contents of the toolbar. |top_level_window| is the GtkWindow | 54 // Create the contents of the toolbar. |top_level_window| is the GtkWindow |
53 // to which we attach our accelerators. | 55 // to which we attach our accelerators. |
54 void Init(Profile* profile, GtkWindow* top_level_window); | 56 void Init(Profile* profile, GtkWindow* top_level_window); |
55 | 57 |
56 // Set the various widgets' ViewIDs. | 58 // Set the various widgets' ViewIDs. |
57 void SetViewIDs(); | 59 void SetViewIDs(); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 // MenuBarHelper::Delegate implementation ------------------------------------ | 121 // MenuBarHelper::Delegate implementation ------------------------------------ |
120 virtual void PopupForButton(GtkWidget* button); | 122 virtual void PopupForButton(GtkWidget* button); |
121 virtual void PopupForButtonNextTo(GtkWidget* button, | 123 virtual void PopupForButtonNextTo(GtkWidget* button, |
122 GtkMenuDirectionType dir); | 124 GtkMenuDirectionType dir); |
123 | 125 |
124 // AnimationDelegate implementation ------------------------------------------ | 126 // AnimationDelegate implementation ------------------------------------------ |
125 virtual void AnimationEnded(const Animation* animation); | 127 virtual void AnimationEnded(const Animation* animation); |
126 virtual void AnimationProgressed(const Animation* animation); | 128 virtual void AnimationProgressed(const Animation* animation); |
127 virtual void AnimationCanceled(const Animation* animation); | 129 virtual void AnimationCanceled(const Animation* animation); |
128 | 130 |
| 131 // ActiveWindowWatcher::Observer implementation ------------------------------ |
| 132 virtual void ActiveWindowChanged(GdkWindow* active_window); |
| 133 |
129 private: | 134 private: |
130 // Builds a toolbar button with all the properties set. | 135 // Builds a toolbar button with all the properties set. |
131 // |spacing| is the width of padding (in pixels) on the left and right of the | 136 // |spacing| is the width of padding (in pixels) on the left and right of the |
132 // button. | 137 // button. |
133 CustomDrawButton* BuildToolbarButton(int normal_id, | 138 CustomDrawButton* BuildToolbarButton(int normal_id, |
134 int active_id, | 139 int active_id, |
135 int highlight_id, | 140 int highlight_id, |
136 int depressed_id, | 141 int depressed_id, |
137 int background_id, | 142 int background_id, |
138 const std::string& localized_tooltip, | 143 const std::string& localized_tooltip, |
(...skipping 10 matching lines...) Expand all Loading... |
149 | 154 |
150 // Helper for the PageAppMenu event handlers. Pops down the currently active | 155 // Helper for the PageAppMenu event handlers. Pops down the currently active |
151 // meun and pops up the other menu. | 156 // meun and pops up the other menu. |
152 void ChangeActiveMenu(GtkWidget* active_menu, guint timestamp); | 157 void ChangeActiveMenu(GtkWidget* active_menu, guint timestamp); |
153 | 158 |
154 // Sets the top corners of the toolbar to rounded, or sets them to normal, | 159 // Sets the top corners of the toolbar to rounded, or sets them to normal, |
155 // depending on the state of the browser window. Returns false if no action | 160 // depending on the state of the browser window. Returns false if no action |
156 // was taken (the roundedness was already correct), true otherwise. | 161 // was taken (the roundedness was already correct), true otherwise. |
157 bool UpdateRoundedness(); | 162 bool UpdateRoundedness(); |
158 | 163 |
| 164 // Calculates whether the upgrade notification dot should be faded at all |
| 165 // (as opposed to solid). |
| 166 bool UpgradeAnimationIsFaded(); |
| 167 |
159 // Gtk callback for the "expose-event" signal. | 168 // Gtk callback for the "expose-event" signal. |
160 // The alignment contains the toolbar. | 169 // The alignment contains the toolbar. |
161 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnAlignmentExpose, | 170 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnAlignmentExpose, |
162 GdkEventExpose*); | 171 GdkEventExpose*); |
163 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnLocationHboxExpose, | 172 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnLocationHboxExpose, |
164 GdkEventExpose*); | 173 GdkEventExpose*); |
165 | 174 |
166 // Gtk callback for the "clicked" signal. | 175 // Gtk callback for the "clicked" signal. |
167 CHROMEGTK_CALLBACK_0(BrowserToolbarGtk, void, OnButtonClick); | 176 CHROMEGTK_CALLBACK_0(BrowserToolbarGtk, void, OnButtonClick); |
168 | 177 |
169 // Gtk callback to intercept mouse clicks to the menu buttons. | 178 // Gtk callback to intercept mouse clicks to the menu buttons. |
170 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnMenuButtonPressEvent, | 179 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnMenuButtonPressEvent, |
171 GdkEventButton*); | 180 GdkEventButton*); |
172 | 181 |
173 // Used for drags onto home button. | 182 // Used for drags onto home button. |
174 CHROMEGTK_CALLBACK_6(BrowserToolbarGtk, void, OnDragDataReceived, | 183 CHROMEGTK_CALLBACK_6(BrowserToolbarGtk, void, OnDragDataReceived, |
175 GdkDragContext*, gint, gint, GtkSelectionData*, | 184 GdkDragContext*, gint, gint, GtkSelectionData*, |
176 guint, guint); | 185 guint, guint); |
177 | 186 |
178 // Used to stop the upgrade notification animation. | 187 // Used to stop the upgrade notification animation. |
179 CHROMEGTK_CALLBACK_0(BrowserToolbarGtk, void, OnAppMenuShow); | 188 CHROMEGTK_CALLBACK_0(BrowserToolbarGtk, void, OnAppMenuShow); |
180 | 189 |
181 // Used to draw the upgrade notification badge. | 190 // Used to draw the upgrade notification badge. |
182 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnAppMenuImageExpose, | 191 CHROMEGTK_CALLBACK_1(BrowserToolbarGtk, gboolean, OnAppMenuImageExpose, |
183 GdkEventExpose*); | 192 GdkEventExpose*); |
184 | 193 |
185 // Updates preference-dependent state. | 194 // Updates preference-dependent state. |
186 void NotifyPrefChanged(const std::wstring* pref); | 195 void NotifyPrefChanged(const std::wstring* pref); |
187 | 196 |
188 // Start the upgrade notification animation. | 197 // Start the upgrade notification animation if we have detected an upgrade |
189 void ShowUpgradeReminder(); | 198 // and the current toolbar is focused. |
| 199 void MaybeShowUpgradeReminder(); |
190 | 200 |
191 static void SetSyncMenuLabel(GtkWidget* widget, gpointer userdata); | 201 static void SetSyncMenuLabel(GtkWidget* widget, gpointer userdata); |
192 | 202 |
193 // Sometimes we only want to show the location w/o the toolbar buttons (e.g., | 203 // Sometimes we only want to show the location w/o the toolbar buttons (e.g., |
194 // in a popup window). | 204 // in a popup window). |
195 bool ShouldOnlyShowLocation() const; | 205 bool ShouldOnlyShowLocation() const; |
196 | 206 |
197 // An event box that holds |toolbar_|. We need the toolbar to have its own | 207 // An event box that holds |toolbar_|. We need the toolbar to have its own |
198 // GdkWindow when we use the GTK drawing because otherwise the color from our | 208 // GdkWindow when we use the GTK drawing because otherwise the color from our |
199 // parent GdkWindow will leak through with some theme engines (such as | 209 // parent GdkWindow will leak through with some theme engines (such as |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 // rendering. | 271 // rendering. |
262 OwnedWidgetGtk offscreen_entry_; | 272 OwnedWidgetGtk offscreen_entry_; |
263 | 273 |
264 MenuBarHelper menu_bar_helper_; | 274 MenuBarHelper menu_bar_helper_; |
265 | 275 |
266 // Manages the home button drop signal handler. | 276 // Manages the home button drop signal handler. |
267 scoped_ptr<GtkSignalRegistrar> drop_handler_; | 277 scoped_ptr<GtkSignalRegistrar> drop_handler_; |
268 | 278 |
269 ThrobAnimation upgrade_reminder_animation_; | 279 ThrobAnimation upgrade_reminder_animation_; |
270 | 280 |
| 281 // We have already shown and dismissed the upgrade reminder animation. |
| 282 bool upgrade_reminder_canceled_; |
| 283 |
271 // When collapsed, the toolbar is just a tiny strip, no controls are visible. | 284 // When collapsed, the toolbar is just a tiny strip, no controls are visible. |
272 bool collapsed_; | 285 bool collapsed_; |
273 | 286 |
274 DISALLOW_COPY_AND_ASSIGN(BrowserToolbarGtk); | 287 DISALLOW_COPY_AND_ASSIGN(BrowserToolbarGtk); |
275 }; | 288 }; |
276 | 289 |
277 #endif // CHROME_BROWSER_GTK_BROWSER_TOOLBAR_GTK_H_ | 290 #endif // CHROME_BROWSER_GTK_BROWSER_TOOLBAR_GTK_H_ |
OLD | NEW |