diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-12 03:29:17 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-12 03:29:17 +0000 |
commit | c59fc74df671f470511a87e24c2d7efee864c27e (patch) | |
tree | afa5d8d8d544e8776dd0145e02e809d3ffd2fb55 /chrome/browser/gtk | |
parent | 95b6410d01c83492c108ca117c41aee03c774225 (diff) | |
download | chromium_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.cc | 32 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_manager_gtk.h | 10 |
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_; |