Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2097)

Unified Diff: chrome/browser/ui/gtk/browser_window_gtk.cc

Issue 10117016: Implementation for switching between recently used tabs using ctrl tilde or quoteleft. Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Uploading patch for review after rebase. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/gtk/browser_window_gtk.cc
diff --git a/chrome/browser/ui/gtk/browser_window_gtk.cc b/chrome/browser/ui/gtk/browser_window_gtk.cc
index 8037ff8b57b6dca5f4fd0756c75e537ce76cf886..d3b64ac26f150e992947a926168296e822239b47 100644
--- a/chrome/browser/ui/gtk/browser_window_gtk.cc
+++ b/chrome/browser/ui/gtk/browser_window_gtk.cc
@@ -78,6 +78,7 @@
#include "chrome/browser/ui/omnibox/omnibox_view.h"
#include "chrome/browser/ui/page_info_bubble.h"
#include "chrome/browser/ui/tab_contents/tab_contents.h"
+#include "chrome/browser/ui/tabs/mru_tab_controller.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/web_applications/web_app.h"
#include "chrome/common/chrome_notification_types.h"
@@ -1793,6 +1794,8 @@ void BrowserWindowGtk::ConnectHandlersToSignals() {
G_CALLBACK(OnWindowStateThunk), this);
g_signal_connect(window_, "key-press-event",
G_CALLBACK(OnKeyPressThunk), this);
+ g_signal_connect(window_, "key-release-event",
+ G_CALLBACK(OnKeyReleaseThunk), this);
g_signal_connect(window_, "motion-notify-event",
G_CALLBACK(OnMouseMoveEventThunk), this);
g_signal_connect(window_, "button-press-event",
@@ -2213,6 +2216,22 @@ gboolean BrowserWindowGtk::OnKeyPress(GtkWidget* widget, GdkEventKey* event) {
if (extension_keybinding_registry_->HasPriorityHandler(event))
return FALSE;
+ // Pause tab mru stack updates when control key is pressed. For eg. ignore
+ // active tab changes when ctrl key is pressed. Commit the changes only
+ // on releasing the ctrl key.
+ MRUTabController* mru_tab_controller = browser()->mru_tab_controller();
+ if (mru_tab_controller) {
+ guint modifier = event->state & gtk_accelerator_get_default_mod_mask();
+ if (GDK_CONTROL_MASK == modifier) {
+ if ((event->keyval == GDK_KEY_asciitilde) ||
+ (event->keyval == GDK_KEY_quoteleft)) {
+ mru_tab_controller->CommitActiveTabChanges();
+ } else {
+ mru_tab_controller->PauseStackUpdates();
+ }
+ }
+ }
+
// If a widget besides the native view is focused, we have to try to handle
// the custom accelerators before letting it handle them.
WebContents* current_web_contents = chrome::GetActiveWebContents(browser());
@@ -2242,6 +2261,17 @@ gboolean BrowserWindowGtk::OnKeyPress(GtkWidget* widget, GdkEventKey* event) {
return TRUE;
}
+gboolean BrowserWindowGtk::OnKeyRelease(GtkWidget* widget, GdkEventKey* event) {
+ MRUTabController* mru_tab_controller = browser()->mru_tab_controller();
+ if (mru_tab_controller &&
+ (event->keyval == GDK_KEY_Control_L ||
+ event->keyval == GDK_KEY_Control_R)) {
+ mru_tab_controller->CommitActiveTabChanges();
+ }
+
+ return FALSE;
+}
+
gboolean BrowserWindowGtk::OnMouseMoveEvent(GtkWidget* widget,
GdkEventMotion* event) {
// This method is used to update the mouse cursor when over the edge of the

Powered by Google App Engine
This is Rietveld 408576698