| 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
|
|
|