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

Side by Side 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: Fixed review comments. Created 8 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/gtk/browser_window_gtk.h" 5 #include "chrome/browser/ui/gtk/browser_window_gtk.h"
6 6
7 #include <dlfcn.h> 7 #include <dlfcn.h>
8 #include <gdk/gdkkeysyms.h> 8 #include <gdk/gdkkeysyms.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 #include "chrome/browser/ui/gtk/reload_button_gtk.h" 67 #include "chrome/browser/ui/gtk/reload_button_gtk.h"
68 #include "chrome/browser/ui/gtk/status_bubble_gtk.h" 68 #include "chrome/browser/ui/gtk/status_bubble_gtk.h"
69 #include "chrome/browser/ui/gtk/tab_contents_container_gtk.h" 69 #include "chrome/browser/ui/gtk/tab_contents_container_gtk.h"
70 #include "chrome/browser/ui/gtk/tabs/tab_strip_gtk.h" 70 #include "chrome/browser/ui/gtk/tabs/tab_strip_gtk.h"
71 #include "chrome/browser/ui/gtk/task_manager_gtk.h" 71 #include "chrome/browser/ui/gtk/task_manager_gtk.h"
72 #include "chrome/browser/ui/gtk/update_recommended_dialog.h" 72 #include "chrome/browser/ui/gtk/update_recommended_dialog.h"
73 #include "chrome/browser/ui/omnibox/location_bar.h" 73 #include "chrome/browser/ui/omnibox/location_bar.h"
74 #include "chrome/browser/ui/omnibox/omnibox_view.h" 74 #include "chrome/browser/ui/omnibox/omnibox_view.h"
75 #include "chrome/browser/ui/page_info_bubble.h" 75 #include "chrome/browser/ui/page_info_bubble.h"
76 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 76 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
77 #include "chrome/browser/ui/tabs/tab_mru_list_manager.h"
77 #include "chrome/browser/ui/tabs/tab_strip_model.h" 78 #include "chrome/browser/ui/tabs/tab_strip_model.h"
78 #include "chrome/browser/ui/webui/task_manager/task_manager_dialog.h" 79 #include "chrome/browser/ui/webui/task_manager/task_manager_dialog.h"
79 #include "chrome/browser/web_applications/web_app.h" 80 #include "chrome/browser/web_applications/web_app.h"
80 #include "chrome/browser/website_settings.h" 81 #include "chrome/browser/website_settings.h"
81 #include "chrome/common/chrome_notification_types.h" 82 #include "chrome/common/chrome_notification_types.h"
82 #include "chrome/common/chrome_switches.h" 83 #include "chrome/common/chrome_switches.h"
83 #include "chrome/common/pref_names.h" 84 #include "chrome/common/pref_names.h"
84 #include "content/public/browser/download_manager.h" 85 #include "content/public/browser/download_manager.h"
85 #include "content/public/browser/native_web_keyboard_event.h" 86 #include "content/public/browser/native_web_keyboard_event.h"
86 #include "content/public/browser/notification_service.h" 87 #include "content/public/browser/notification_service.h"
(...skipping 1702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1789 g_signal_connect(window_, "delete-event", 1790 g_signal_connect(window_, "delete-event",
1790 G_CALLBACK(OnMainWindowDeleteEventThunk), this); 1791 G_CALLBACK(OnMainWindowDeleteEventThunk), this);
1791 g_signal_connect(window_, "destroy", 1792 g_signal_connect(window_, "destroy",
1792 G_CALLBACK(OnMainWindowDestroyThunk), this); 1793 G_CALLBACK(OnMainWindowDestroyThunk), this);
1793 g_signal_connect(window_, "configure-event", 1794 g_signal_connect(window_, "configure-event",
1794 G_CALLBACK(OnConfigureThunk), this); 1795 G_CALLBACK(OnConfigureThunk), this);
1795 g_signal_connect(window_, "window-state-event", 1796 g_signal_connect(window_, "window-state-event",
1796 G_CALLBACK(OnWindowStateThunk), this); 1797 G_CALLBACK(OnWindowStateThunk), this);
1797 g_signal_connect(window_, "key-press-event", 1798 g_signal_connect(window_, "key-press-event",
1798 G_CALLBACK(OnKeyPressThunk), this); 1799 G_CALLBACK(OnKeyPressThunk), this);
1800 g_signal_connect(window_, "key-release-event",
1801 G_CALLBACK(OnKeyReleaseThunk), this);
1799 g_signal_connect(window_, "motion-notify-event", 1802 g_signal_connect(window_, "motion-notify-event",
1800 G_CALLBACK(OnMouseMoveEventThunk), this); 1803 G_CALLBACK(OnMouseMoveEventThunk), this);
1801 g_signal_connect(window_, "button-press-event", 1804 g_signal_connect(window_, "button-press-event",
1802 G_CALLBACK(OnButtonPressEventThunk), this); 1805 G_CALLBACK(OnButtonPressEventThunk), this);
1803 g_signal_connect(window_, "focus-in-event", 1806 g_signal_connect(window_, "focus-in-event",
1804 G_CALLBACK(OnFocusInThunk), this); 1807 G_CALLBACK(OnFocusInThunk), this);
1805 g_signal_connect(window_, "focus-out-event", 1808 g_signal_connect(window_, "focus-out-event",
1806 G_CALLBACK(OnFocusOutThunk), this); 1809 G_CALLBACK(OnFocusOutThunk), this);
1807 } 1810 }
1808 1811
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 // override their accelerators, except if there is a priority keybinding 2216 // override their accelerators, except if there is a priority keybinding
2214 // handler registered (it should take precedence). 2217 // handler registered (it should take precedence).
2215 gboolean BrowserWindowGtk::OnKeyPress(GtkWidget* widget, GdkEventKey* event) { 2218 gboolean BrowserWindowGtk::OnKeyPress(GtkWidget* widget, GdkEventKey* event) {
2216 if (extension_keybinding_registry_->HasPriorityHandler(event)) 2219 if (extension_keybinding_registry_->HasPriorityHandler(event))
2217 return FALSE; 2220 return FALSE;
2218 2221
2219 // If a widget besides the native view is focused, we have to try to handle 2222 // If a widget besides the native view is focused, we have to try to handle
2220 // the custom accelerators before letting it handle them. 2223 // the custom accelerators before letting it handle them.
2221 WebContents* current_web_contents = 2224 WebContents* current_web_contents =
2222 browser()->GetSelectedWebContents(); 2225 browser()->GetSelectedWebContents();
2226
2227 guint modifier = event->state & gtk_accelerator_get_default_mod_mask();
2228 bool is_tab_mru_switch = CommandLine::ForCurrentProcess()->HasSwitch(
2229 switches::kEnableTabMRUSwitch);
sky 2012/06/15 19:47:39 spacing is off. Rather than checking switch value,
NaveenBobbili (Motorola) 2012/06/25 09:44:23 Done.
2230 if (GDK_CONTROL_MASK == modifier && is_tab_mru_switch) {
2231 if ((event->keyval == GDK_KEY_asciitilde) ||
2232 (event->keyval == GDK_KEY_quoteleft)) {
2233 browser()->tab_mru_list_manager()->CommitActiveTabChanges();
2234 }
2235 else
2236 browser()->tab_mru_list_manager()->PauseStackUpdates();
2237 }
2238
2223 // The current tab might not have a render view if it crashed. 2239 // The current tab might not have a render view if it crashed.
2224 if (!current_web_contents || !current_web_contents->GetContentNativeView() || 2240 if (!current_web_contents || !current_web_contents->GetContentNativeView() ||
2225 !gtk_widget_is_focus(current_web_contents->GetContentNativeView())) { 2241 !gtk_widget_is_focus(current_web_contents->GetContentNativeView())) {
2226 int command_id = GetCustomCommandId(event); 2242 int command_id = GetCustomCommandId(event);
2227 if (command_id == -1) 2243 if (command_id == -1)
2228 command_id = GetPreHandleCommandId(event); 2244 command_id = GetPreHandleCommandId(event);
2229 2245
2230 if (command_id != -1 && browser_->ExecuteCommandIfEnabled(command_id)) 2246 if (command_id != -1 && browser_->ExecuteCommandIfEnabled(command_id))
2231 return TRUE; 2247 return TRUE;
2232 2248
2233 // Propagate the key event to child widget first, so we don't override their 2249 // Propagate the key event to child widget first, so we don't override their
2234 // accelerators. 2250 // accelerators.
2235 if (!gtk_window_propagate_key_event(GTK_WINDOW(widget), event)) { 2251 if (!gtk_window_propagate_key_event(GTK_WINDOW(widget), event)) {
2236 if (!gtk_window_activate_key(GTK_WINDOW(widget), event)) { 2252 if (!gtk_window_activate_key(GTK_WINDOW(widget), event)) {
2237 gtk_bindings_activate_event(GTK_OBJECT(widget), event); 2253 gtk_bindings_activate_event(GTK_OBJECT(widget), event);
2238 } 2254 }
2239 } 2255 }
2240 } else { 2256 } else {
2241 bool rv = gtk_window_propagate_key_event(GTK_WINDOW(widget), event); 2257 bool rv = gtk_window_propagate_key_event(GTK_WINDOW(widget), event);
2242 DCHECK(rv); 2258 DCHECK(rv);
2243 } 2259 }
2244 2260
2245 // Prevents the default handler from handling this event. 2261 // Prevents the default handler from handling this event.
2246 return TRUE; 2262 return TRUE;
2247 } 2263 }
2248 2264
2265 gboolean BrowserWindowGtk::OnKeyRelease(GtkWidget* widget, GdkEventKey* event) {
2266 bool is_tab_mru_switch = CommandLine::ForCurrentProcess()->HasSwitch(
2267 switches::kEnableTabMRUSwitch);
sky 2012/06/15 19:47:39 spacing is off.
NaveenBobbili (Motorola) 2012/06/25 09:44:23 Done.
2268 if (is_tab_mru_switch &&
2269 (event->keyval == GDK_KEY_Control_L ||
2270 event->keyval == GDK_KEY_Control_R)) {
2271 browser()->tab_mru_list_manager()->CommitActiveTabChanges();
2272 }
2273
2274 return FALSE;
2275 }
2276
2249 gboolean BrowserWindowGtk::OnMouseMoveEvent(GtkWidget* widget, 2277 gboolean BrowserWindowGtk::OnMouseMoveEvent(GtkWidget* widget,
2250 GdkEventMotion* event) { 2278 GdkEventMotion* event) {
2251 // This method is used to update the mouse cursor when over the edge of the 2279 // This method is used to update the mouse cursor when over the edge of the
2252 // custom frame. If the custom frame is off or we're over some other widget, 2280 // custom frame. If the custom frame is off or we're over some other widget,
2253 // do nothing. 2281 // do nothing.
2254 if (!UseCustomFrame() || event->window != gtk_widget_get_window(widget)) { 2282 if (!UseCustomFrame() || event->window != gtk_widget_get_window(widget)) {
2255 // Reset the cursor. 2283 // Reset the cursor.
2256 if (frame_cursor_) { 2284 if (frame_cursor_) {
2257 frame_cursor_ = NULL; 2285 frame_cursor_ = NULL;
2258 gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window_)), NULL); 2286 gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window_)), NULL);
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 wm_type == ui::WM_OPENBOX || 2629 wm_type == ui::WM_OPENBOX ||
2602 wm_type == ui::WM_XFWM4); 2630 wm_type == ui::WM_XFWM4);
2603 } 2631 }
2604 2632
2605 // static 2633 // static
2606 BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) { 2634 BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) {
2607 BrowserWindowGtk* browser_window_gtk = new BrowserWindowGtk(browser); 2635 BrowserWindowGtk* browser_window_gtk = new BrowserWindowGtk(browser);
2608 browser_window_gtk->Init(); 2636 browser_window_gtk->Init();
2609 return browser_window_gtk; 2637 return browser_window_gtk;
2610 } 2638 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698