summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-12 03:29:17 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-12 03:29:17 +0000
commitc59fc74df671f470511a87e24c2d7efee864c27e (patch)
treeafa5d8d8d544e8776dd0145e02e809d3ffd2fb55 /chrome/browser/gtk
parent95b6410d01c83492c108ca117c41aee03c774225 (diff)
downloadchromium_src-c59fc74df671f470511a87e24c2d7efee864c27e.zip
chromium_src-c59fc74df671f470511a87e24c2d7efee864c27e.tar.gz
chromium_src-c59fc74df671f470511a87e24c2d7efee864c27e.tar.bz2
Add ctrl+w accelerator to close bookmark manager for linux
Following the way that the Task Manger does it. BUG=18879 patch by Joel Stanley <joel.stan [at] gmail> original review: http://codereview.chromium.org/165220 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23160 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk')
-rw-r--r--chrome/browser/gtk/bookmark_manager_gtk.cc32
-rw-r--r--chrome/browser/gtk/bookmark_manager_gtk.h10
2 files changed, 42 insertions, 0 deletions
diff --git a/chrome/browser/gtk/bookmark_manager_gtk.cc b/chrome/browser/gtk/bookmark_manager_gtk.cc
index 6d5cc6b..5bf9159 100644
--- a/chrome/browser/gtk/bookmark_manager_gtk.cc
+++ b/chrome/browser/gtk/bookmark_manager_gtk.cc
@@ -307,6 +307,7 @@ BookmarkManagerGtk::BookmarkManagerGtk(Profile* profile)
sending_delayed_mousedown_(false),
ignore_rightclicks_(false) {
InitWidgets();
+ ConnectAccelerators();
gtk_util::SetWindowIcon(GTK_WINDOW(window_));
model_->AddObserver(this);
@@ -417,6 +418,19 @@ void BookmarkManagerGtk::InitWidgets() {
ResetOrganizeMenu(true);
}
+void BookmarkManagerGtk::ConnectAccelerators() {
+ GtkAccelGroup* accel_group = gtk_accel_group_new();
+ gtk_window_add_accel_group(GTK_WINDOW(window_), accel_group);
+
+ // Drop the initial ref on |accel_group| so |window_| will own it.
+ g_object_unref(accel_group);
+
+ gtk_accel_group_connect(accel_group,
+ GDK_w, GDK_CONTROL_MASK, GtkAccelFlags(0),
+ g_cclosure_new(G_CALLBACK(OnGtkAccelerator),
+ this, NULL));
+}
+
GtkWidget* BookmarkManagerGtk::MakeLeftPane() {
left_store_ = bookmark_utils::MakeFolderTreeStore();
left_tree_view_ = bookmark_utils::MakeTreeViewForStore(left_store_);
@@ -1387,3 +1401,21 @@ void BookmarkManagerGtk::FileSelected(const FilePath& path,
NOTREACHED();
}
}
+
+// static
+gboolean BookmarkManagerGtk::OnGtkAccelerator(GtkAccelGroup* accel_group,
+ GObject* acceleratable,
+ guint keyval,
+ GdkModifierType modifier,
+ BookmarkManagerGtk* bookmark_manager) {
+ modifier = static_cast<GdkModifierType>(
+ modifier & gtk_accelerator_get_default_mod_mask());
+ // The only accelerator we have registered is ctrl+w, so any other value is a
+ // non-fatal error.
+ DCHECK_EQ(keyval, static_cast<guint>(GDK_w));
+ DCHECK_EQ(modifier, GDK_CONTROL_MASK);
+
+ gtk_widget_destroy(bookmark_manager->window_);
+
+ return TRUE;
+}
diff --git a/chrome/browser/gtk/bookmark_manager_gtk.h b/chrome/browser/gtk/bookmark_manager_gtk.h
index 4c98317..d61613e 100644
--- a/chrome/browser/gtk/bookmark_manager_gtk.h
+++ b/chrome/browser/gtk/bookmark_manager_gtk.h
@@ -77,6 +77,9 @@ class BookmarkManagerGtk : public BookmarkModelObserver,
// Set |window_|'s initial size, using its previous size if that was saved.
void SetInitialWindowSize();
+ // Connects the ctrl-w accelerator to the window.
+ void ConnectAccelerators();
+
// If |left|, then make the organize menu refer to that which is selected in
// the left pane, otherwise use the right pane selection.
void ResetOrganizeMenu(bool left);
@@ -270,6 +273,13 @@ class BookmarkManagerGtk : public BookmarkModelObserver,
}
gboolean OnWindowConfigured(GtkWidget* window, GdkEventConfigure* event);
+ // Handles an accelerator being pressed.
+ static gboolean OnGtkAccelerator(GtkAccelGroup* accel_group,
+ GObject* acceleratable,
+ guint keyval,
+ GdkModifierType modifier,
+ BookmarkManagerGtk* bookmark_manager);
+
GtkWidget* window_;
GtkWidget* search_entry_;
Profile* profile_;