summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/gtk/browser_titlebar.cc
diff options
context:
space:
mode:
authorprasadt@chromium.org <prasadt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-23 17:09:17 +0000
committerprasadt@chromium.org <prasadt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-23 17:09:17 +0000
commit878c65d96c3ebf4ee6299e3f0185d9acbd7c6282 (patch)
tree8296e97a982ec3300d2f42eb6d125d84115287cf /chrome/browser/ui/gtk/browser_titlebar.cc
parent1a2490c3e50dc17220981af077c005095af3606c (diff)
downloadchromium_src-878c65d96c3ebf4ee6299e3f0185d9acbd7c6282.zip
chromium_src-878c65d96c3ebf4ee6299e3f0185d9acbd7c6282.tar.gz
chromium_src-878c65d96c3ebf4ee6299e3f0185d9acbd7c6282.tar.bz2
Titlebar modifications for panels.
- Do not show minimize and maximize buttons. - Add a wrench icon that only displays when panel window has focus or mouse is in the panel window. TEST=Manual. Bring up a panel and verify the above behavior. BUG=73936 modified: chrome/browser/ui/gtk/browser_titlebar.cc modified: chrome/browser/ui/gtk/browser_titlebar.h Review URL: http://codereview.chromium.org/7206036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90226 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/gtk/browser_titlebar.cc')
-rw-r--r--chrome/browser/ui/gtk/browser_titlebar.cc75
1 files changed, 66 insertions, 9 deletions
diff --git a/chrome/browser/ui/gtk/browser_titlebar.cc b/chrome/browser/ui/gtk/browser_titlebar.cc
index 4dd48c5..88fe07a 100644
--- a/chrome/browser/ui/gtk/browser_titlebar.cc
+++ b/chrome/browser/ui/gtk/browser_titlebar.cc
@@ -219,6 +219,7 @@ BrowserTitlebar::BrowserTitlebar(BrowserWindowGtk* browser_window,
app_mode_title_(NULL),
using_custom_frame_(false),
window_has_focus_(false),
+ window_has_mouse_(false),
theme_service_(NULL) {
Init();
}
@@ -284,6 +285,13 @@ void BrowserTitlebar::Init() {
g_signal_connect(window_, "window-state-event",
G_CALLBACK(OnWindowStateChangedThunk), this);
+ if (IsTypePanel()) {
+ g_signal_connect(window_, "enter-notify-event",
+ G_CALLBACK(OnEnterNotifyThunk), this);
+ g_signal_connect(window_, "leave-notify-event",
+ G_CALLBACK(OnLeaveNotifyThunk), this);
+ }
+
// Allocate the two button boxes on the left and right parts of the bar,
// spyguy frames in case of incognito mode, and profile button boxes.
titlebar_left_buttons_vbox_ = gtk_vbox_new(FALSE, 0);
@@ -376,6 +384,14 @@ void BrowserTitlebar::Init() {
reinterpret_cast<void*>(true));
gtk_container_add(GTK_CONTAINER(favicon_event_box), app_mode_favicon_);
+ if (IsTypePanel()) {
+ panel_wrench_button_.reset(
+ BuildTitlebarButton(IDR_BALLOON_WRENCH, IDR_BALLOON_WRENCH_P,
+ IDR_BALLOON_WRENCH_H, app_mode_hbox, FALSE,
+ IDS_NEW_TAB_APP_SETTINGS));
+ gtk_widget_set_no_show_all(panel_wrench_button_->widget(), TRUE);
+ }
+
app_mode_title_ = gtk_label_new(NULL);
gtk_label_set_ellipsize(GTK_LABEL(app_mode_title_), PANGO_ELLIPSIZE_END);
gtk_misc_set_alignment(GTK_MISC(app_mode_title_), 0.0, 0.5);
@@ -428,26 +444,26 @@ void BrowserTitlebar::BuildButtons(const std::string& button_string) {
left_side = false;
} else {
base::StringPiece token = tokenizer.token_piece();
- if (token == "minimize") {
+ if (token == "minimize" && !IsTypePanel()) {
(left_side ? left_count : right_count)++;
GtkWidget* parent_box = GetButtonHBox(left_side);
minimize_button_.reset(
BuildTitlebarButton(IDR_MINIMIZE, IDR_MINIMIZE_P,
- IDR_MINIMIZE_H, parent_box,
+ IDR_MINIMIZE_H, parent_box, true,
IDS_XPFRAME_MINIMIZE_TOOLTIP));
gtk_widget_size_request(minimize_button_->widget(),
&minimize_button_req_);
- } else if (token == "maximize") {
+ } else if (token == "maximize" && !IsTypePanel()) {
(left_side ? left_count : right_count)++;
GtkWidget* parent_box = GetButtonHBox(left_side);
restore_button_.reset(
BuildTitlebarButton(IDR_RESTORE, IDR_RESTORE_P,
- IDR_RESTORE_H, parent_box,
+ IDR_RESTORE_H, parent_box, true,
IDS_XPFRAME_RESTORE_TOOLTIP));
maximize_button_.reset(
BuildTitlebarButton(IDR_MAXIMIZE, IDR_MAXIMIZE_P,
- IDR_MAXIMIZE_H, parent_box,
+ IDR_MAXIMIZE_H, parent_box, true,
IDS_XPFRAME_MAXIMIZE_TOOLTIP));
gtk_util::SetButtonClickableByMouseButtons(maximize_button_->widget(),
@@ -459,7 +475,7 @@ void BrowserTitlebar::BuildButtons(const std::string& button_string) {
GtkWidget* parent_box = GetButtonHBox(left_side);
close_button_.reset(
BuildTitlebarButton(IDR_CLOSE, IDR_CLOSE_P,
- IDR_CLOSE_H, parent_box,
+ IDR_CLOSE_H, parent_box, true,
IDS_XPFRAME_CLOSE_TOOLTIP));
close_button_->set_flipped(left_side);
@@ -532,7 +548,8 @@ GtkWidget* BrowserTitlebar::GetButtonHBox(bool left_side) {
}
CustomDrawButton* BrowserTitlebar::BuildTitlebarButton(int image,
- int image_pressed, int image_hot, GtkWidget* box, int tooltip) {
+ int image_pressed, int image_hot, GtkWidget* box, bool start,
+ int tooltip) {
CustomDrawButton* button = new CustomDrawButton(image, image_pressed,
image_hot, 0);
gtk_widget_add_events(GTK_WIDGET(button->widget()), GDK_POINTER_MOTION_MASK);
@@ -543,7 +560,10 @@ CustomDrawButton* BrowserTitlebar::BuildTitlebarButton(int image,
std::string localized_tooltip = l10n_util::GetStringUTF8(tooltip);
gtk_widget_set_tooltip_text(button->widget(),
localized_tooltip.c_str());
- gtk_box_pack_start(GTK_BOX(box), button->widget(), FALSE, FALSE, 0);
+ if (start)
+ gtk_box_pack_start(GTK_BOX(box), button->widget(), FALSE, FALSE, 0);
+ else
+ gtk_box_pack_end(GTK_BOX(box), button->widget(), FALSE, FALSE, 0);
return button;
}
@@ -575,7 +595,7 @@ void BrowserTitlebar::UpdateTitleAndIcon() {
// Note: we want to exclude the application popup window.
if (browser_window_->browser()->is_app() &&
- !browser_window_->browser()->is_type_popup()) {
+ browser_window_->browser()->is_type_tabbed()) {
// Update the system app icon. We don't need to update the icon in the top
// left of the custom frame, that will get updated when the throbber is
// updated.
@@ -802,6 +822,32 @@ gboolean BrowserTitlebar::OnScroll(GtkWidget* widget, GdkEventScroll* event) {
return TRUE;
}
+gboolean BrowserTitlebar::OnEnterNotify(GtkWidget* widget,
+ GdkEventCrossing* event) {
+ // Ignore if entered from a child widget.
+ if (event->detail == GDK_NOTIFY_INFERIOR)
+ return FALSE;
+
+ if (window_ && panel_wrench_button_.get())
+ gtk_widget_show(panel_wrench_button_->widget());
+
+ window_has_mouse_ = TRUE;
+ return FALSE;
+}
+
+gboolean BrowserTitlebar::OnLeaveNotify(GtkWidget* widget,
+ GdkEventCrossing* event) {
+ // Ignore if left towards a child widget.
+ if (event->detail == GDK_NOTIFY_INFERIOR)
+ return FALSE;
+
+ if (window_ && panel_wrench_button_.get() && !window_has_focus_)
+ gtk_widget_hide(panel_wrench_button_->widget());
+
+ window_has_mouse_ = FALSE;
+ return FALSE;
+}
+
// static
void BrowserTitlebar::OnButtonClicked(GtkWidget* button) {
if (close_button_.get() && close_button_->widget() == button) {
@@ -912,9 +958,20 @@ void BrowserTitlebar::ActiveWindowChanged(GdkWindow* active_window) {
return;
window_has_focus_ = GTK_WIDGET(window_)->window == active_window;
+ if (IsTypePanel()) {
+ if (window_has_focus_ || window_has_mouse_)
+ gtk_widget_show(panel_wrench_button_->widget());
+ else
+ gtk_widget_hide(panel_wrench_button_->widget());
+ }
UpdateTextColor();
}
+bool BrowserTitlebar::IsTypePanel() {
+ return CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnablePanels) &&
+ browser_window_->browser()->is_type_panel();
+}
+
///////////////////////////////////////////////////////////////////////////////
// BrowserTitlebar::Throbber implementation
// TODO(tc): Handle anti-clockwise spinning when waiting for a connection.