summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-02 21:39:07 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-02 21:39:07 +0000
commit406c913ffa55edfe40c707760ae4b64c4f37fe65 (patch)
tree68d4459f1de5c8794d05656f90c7b3349df1a331 /chrome/browser/gtk
parent1e1f5b25219fba0e0531fd1c118b0acb4ddf4e8f (diff)
downloadchromium_src-406c913ffa55edfe40c707760ae4b64c4f37fe65.zip
chromium_src-406c913ffa55edfe40c707760ae4b64c4f37fe65.tar.gz
chromium_src-406c913ffa55edfe40c707760ae4b64c4f37fe65.tar.bz2
Enable focus-change via tabbing on Linux.
Review URL: http://codereview.chromium.org/28248 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10725 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/browser_toolbar_view_gtk.cc46
-rw-r--r--chrome/browser/gtk/browser_toolbar_view_gtk.h18
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc2
-rw-r--r--chrome/browser/gtk/tab_contents_container_gtk.h8
4 files changed, 68 insertions, 6 deletions
diff --git a/chrome/browser/gtk/browser_toolbar_view_gtk.cc b/chrome/browser/gtk/browser_toolbar_view_gtk.cc
index 98dbb8f..ffee692 100644
--- a/chrome/browser/gtk/browser_toolbar_view_gtk.cc
+++ b/chrome/browser/gtk/browser_toolbar_view_gtk.cc
@@ -84,6 +84,13 @@ void BrowserToolbarGtk::Init(Profile* profile) {
gtk_widget_set_size_request(entry_, 0, 27);
g_signal_connect(G_OBJECT(entry_), "activate",
G_CALLBACK(OnEntryActivate), this);
+ g_signal_connect(G_OBJECT(entry_), "focus",
+ G_CALLBACK(OnEntryFocus), this);
+ g_signal_connect(G_OBJECT(entry_), "focus-in-event",
+ G_CALLBACK(OnEntryFocusIn), this);
+ g_signal_connect(G_OBJECT(entry_), "focus-out-event",
+ G_CALLBACK(OnEntryFocusOut), this);
+
gtk_box_pack_start(GTK_BOX(toolbar_), entry_, TRUE, TRUE, 0);
go_.reset(BuildToolbarButton(IDR_GO, IDR_GO_P, IDR_GO_H, 0, L""));
@@ -103,6 +110,10 @@ void BrowserToolbarGtk::AddToolbarToBox(GtkWidget* box) {
gtk_box_pack_start(GTK_BOX(box), toolbar_, FALSE, FALSE, 0);
}
+void BrowserToolbarGtk::FocusLocationBar() {
+ gtk_widget_grab_focus(entry_);
+}
+
void BrowserToolbarGtk::EnabledStateChangedForCommand(int id, bool enabled) {
GtkWidget* widget = NULL;
switch (id) {
@@ -188,6 +199,7 @@ CustomDrawButton* BrowserToolbarGtk::BuildToolbarButton(
WideToUTF8(localized_tooltip).c_str());
g_signal_connect(G_OBJECT(button->widget()), "clicked",
G_CALLBACK(OnButtonClick), this);
+ GTK_WIDGET_UNSET_FLAGS(button->widget(), GTK_CAN_FOCUS);
gtk_box_pack_start(GTK_BOX(toolbar_), button->widget(), FALSE, FALSE, 0);
return button;
@@ -209,6 +221,7 @@ CustomContainerButton* BrowserToolbarGtk::BuildToolbarMenuButton(
WideToUTF8(localized_tooltip).c_str());
g_signal_connect(G_OBJECT(button->widget()), "button-press-event",
G_CALLBACK(OnMenuButtonPressEvent), this);
+ GTK_WIDGET_UNSET_FLAGS(button->widget(), GTK_CAN_FOCUS);
gtk_box_pack_start(GTK_BOX(toolbar_), button->widget(), FALSE, FALSE, 0);
@@ -224,7 +237,37 @@ void BrowserToolbarGtk::OnEntryActivate(GtkEntry *entry,
OpenURL(dest, GURL(), CURRENT_TAB, PageTransition::TYPED);
}
-/* static */
+// static
+gboolean BrowserToolbarGtk::OnEntryFocus(GtkWidget* widget,
+ GtkDirectionType direction,
+ BrowserToolbarGtk* host) {
+ if (!GTK_WIDGET_HAS_FOCUS(widget)) {
+ gtk_widget_grab_focus(widget);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+// static
+gboolean BrowserToolbarGtk::OnEntryFocusIn(GtkWidget* widget,
+ GdkEventFocus* focus,
+ BrowserToolbarGtk* host) {
+ // Set the caret at the end of the text.
+ gtk_editable_set_position(GTK_EDITABLE(widget), -1);
+ return FALSE;
+}
+
+// static
+gboolean BrowserToolbarGtk::OnEntryFocusOut(GtkWidget* widget,
+ GdkEventFocus* focus,
+ BrowserToolbarGtk* host) {
+ // Clear the selected text (if any).
+ gtk_editable_set_position(GTK_EDITABLE(widget), 0);
+ return FALSE;
+}
+
+// static
void BrowserToolbarGtk::OnButtonClick(GtkWidget* button,
BrowserToolbarGtk* toolbar) {
int tag = -1;
@@ -291,6 +334,7 @@ CustomDrawButton* BrowserToolbarGtk::BuildBackForwardButton(
G_CALLBACK(OnBackForwardPressEvent), this);
g_signal_connect(G_OBJECT(button->widget()), "clicked",
G_CALLBACK(OnButtonClick), this);
+ GTK_WIDGET_UNSET_FLAGS(button->widget(), GTK_CAN_FOCUS);
gtk_box_pack_start(GTK_BOX(toolbar_), button->widget(), FALSE, FALSE, 0);
// Popup the menu as left-aligned relative to this widget rather than the
diff --git a/chrome/browser/gtk/browser_toolbar_view_gtk.h b/chrome/browser/gtk/browser_toolbar_view_gtk.h
index 08a797c..63983022 100644
--- a/chrome/browser/gtk/browser_toolbar_view_gtk.h
+++ b/chrome/browser/gtk/browser_toolbar_view_gtk.h
@@ -40,6 +40,9 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver,
// Adds this GTK toolbar into a sizing box.
void AddToolbarToBox(GtkWidget* box);
+ // Set focus on the entry box.
+ void FocusLocationBar();
+
// Overridden from CommandUpdater::CommandObserver:
virtual void EnabledStateChangedForCommand(int id, bool enabled);
@@ -74,6 +77,21 @@ class BrowserToolbarGtk : public CommandUpdater::CommandObserver,
// enter.
static void OnEntryActivate(GtkEntry *entry, BrowserToolbarGtk* toolbar);
+ // Gtk callback for the "focus" signal on the |entry_| widget.
+ static gboolean OnEntryFocus(GtkWidget* widget,
+ GtkDirectionType direction,
+ BrowserToolbarGtk* host);
+
+ // Gtk callback for the "focus-in" signal on the |entry_| widget.
+ static gboolean OnEntryFocusIn(GtkWidget* widget,
+ GdkEventFocus* focus,
+ BrowserToolbarGtk* host);
+
+ // Gtk callback for the "focus-out" signal on the |entry_| widget.
+ static gboolean OnEntryFocusOut(GtkWidget* widget,
+ GdkEventFocus* focus,
+ BrowserToolbarGtk* host);
+
// Gtk callback for the "clicked" signal.
static void OnButtonClick(GtkWidget* button, BrowserToolbarGtk* toolbar);
diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc
index 4135c72..346990f 100644
--- a/chrome/browser/gtk/browser_window_gtk.cc
+++ b/chrome/browser/gtk/browser_window_gtk.cc
@@ -266,7 +266,7 @@ LocationBar* BrowserWindowGtk::GetLocationBar() const {
}
void BrowserWindowGtk::SetFocusToLocationBar() {
- NOTIMPLEMENTED();
+ toolbar_->FocusLocationBar();
}
void BrowserWindowGtk::UpdateStopGoState(bool is_loading) {
diff --git a/chrome/browser/gtk/tab_contents_container_gtk.h b/chrome/browser/gtk/tab_contents_container_gtk.h
index 927f1f6..c8868b6 100644
--- a/chrome/browser/gtk/tab_contents_container_gtk.h
+++ b/chrome/browser/gtk/tab_contents_container_gtk.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_GTK_TAB_CONTENTS_CONTAINER_GTK_H__
-#define CHROME_BROWSER_GTK_TAB_CONTENTS_CONTAINER_GTK_H__
+#ifndef CHROME_BROWSER_GTK_TAB_CONTENTS_CONTAINER_GTK_H_
+#define CHROME_BROWSER_GTK_TAB_CONTENTS_CONTAINER_GTK_H_
#include <gtk/gtk.h>
@@ -53,7 +53,7 @@ class TabContentsContainerGtk : public NotificationObserver {
// vbox_.
GtkWidget* vbox_;
- DISALLOW_EVIL_CONSTRUCTORS(TabContentsContainerGtk);
+ DISALLOW_COPY_AND_ASSIGN(TabContentsContainerGtk);
};
-#endif // CHROME_BROWSER_GTK_TAB_CONTENTS_CONTAINER_GTK_H__
+#endif // CHROME_BROWSER_GTK_TAB_CONTENTS_CONTAINER_GTK_H_