diff options
author | Iain Merrick <husky@google.com> | 2010-10-19 14:37:37 +0100 |
---|---|---|
committer | Iain Merrick <husky@google.com> | 2010-10-19 14:37:37 +0100 |
commit | 3345a6884c488ff3a535c2c9acdd33d74b37e311 (patch) | |
tree | 7784b988ef1698cb6967ea1bdf07616237716c6c /chrome/browser/gtk/constrained_window_gtk.cc | |
parent | efc8475837ec58186051f23bb03542620424f6ce (diff) | |
download | external_chromium-3345a6884c488ff3a535c2c9acdd33d74b37e311.zip external_chromium-3345a6884c488ff3a535c2c9acdd33d74b37e311.tar.gz external_chromium-3345a6884c488ff3a535c2c9acdd33d74b37e311.tar.bz2 |
Merge Chromium at 7.0.540.0 : Initial merge by git
Not including third_party/icu as it contains huge data files that break Gerrit, and aren't actually used.
Change-Id: I428a386e70f3b58cacd28677b8cfda282e891e15
Diffstat (limited to 'chrome/browser/gtk/constrained_window_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/constrained_window_gtk.cc | 50 |
1 files changed, 16 insertions, 34 deletions
diff --git a/chrome/browser/gtk/constrained_window_gtk.cc b/chrome/browser/gtk/constrained_window_gtk.cc index 321aa16..b901083 100644 --- a/chrome/browser/gtk/constrained_window_gtk.cc +++ b/chrome/browser/gtk/constrained_window_gtk.cc @@ -16,7 +16,7 @@ ConstrainedWindowGtk::ConstrainedWindowGtk( : owner_(owner), delegate_(delegate), visible_(false), - accel_group_(gtk_accel_group_new()) { + factory_(this) { DCHECK(owner); DCHECK(delegate); GtkWidget* dialog = delegate->GetWidgetRoot(); @@ -34,20 +34,14 @@ ConstrainedWindowGtk::ConstrainedWindowGtk( gtk_container_add(GTK_CONTAINER(frame), alignment); gtk_container_add(GTK_CONTAINER(ebox), frame); border_.Own(ebox); - ConnectAccelerators(); + + gtk_widget_add_events(widget(), GDK_KEY_PRESS_MASK); + g_signal_connect(widget(), "key-press-event", G_CALLBACK(OnKeyPressThunk), + this); } ConstrainedWindowGtk::~ConstrainedWindowGtk() { border_.Destroy(); - - gtk_accel_group_disconnect_key(accel_group_, GDK_Escape, - static_cast<GdkModifierType>(0)); - if (ContainingView() && ContainingView()->GetTopLevelNativeWindow()) { - gtk_window_remove_accel_group( - GTK_WINDOW(ContainingView()->GetTopLevelNativeWindow()), - accel_group_); - } - g_object_unref(accel_group_); } void ConstrainedWindowGtk::ShowConstrainedWindow() { @@ -73,29 +67,18 @@ TabContentsViewGtk* ConstrainedWindowGtk::ContainingView() { return static_cast<TabContentsViewGtk*>(owner_->view()); } -void ConstrainedWindowGtk::ConnectAccelerators() { - gtk_accel_group_connect(accel_group_, - GDK_Escape, static_cast<GdkModifierType>(0), - static_cast<GtkAccelFlags>(0), - g_cclosure_new(G_CALLBACK(OnEscapeThunk), - this, NULL)); - gtk_window_add_accel_group( - GTK_WINDOW(ContainingView()->GetTopLevelNativeWindow()), - accel_group_); -} - - -gboolean ConstrainedWindowGtk::OnEscape(GtkAccelGroup* group, - GObject* acceleratable, - guint keyval, - GdkModifierType modifier) { - // Handle this accelerator only if this is on the currently selected tab. - Browser* browser = BrowserList::GetLastActive(); - if (!browser || browser->GetSelectedTabContents() != owner_) - return FALSE; +gboolean ConstrainedWindowGtk::OnKeyPress(GtkWidget* sender, + GdkEventKey* key) { + if (key->keyval == GDK_Escape) { + // Let the stack unwind so the event handler can release its ref + // on widget(). + MessageLoop::current()->PostTask(FROM_HERE, + factory_.NewRunnableMethod( + &ConstrainedWindowGtk::CloseConstrainedWindow)); + return TRUE; + } - CloseConstrainedWindow(); - return TRUE; + return FALSE; } // static @@ -104,4 +87,3 @@ ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog( ConstrainedWindowGtkDelegate* delegate) { return new ConstrainedWindowGtk(parent, delegate); } - |