diff options
author | glotov@google.com <glotov@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-13 11:32:57 +0000 |
---|---|---|
committer | glotov@google.com <glotov@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-13 11:32:57 +0000 |
commit | 549b7e2b1e215aba3617e346c822272e1ec8f04f (patch) | |
tree | a1c101bbd0037c224e3d31bdf1e989dfcb0cab44 /views/widget/widget_gtk.cc | |
parent | bb7005d19a66c276933d6cffe01cc52bd9ec22fd (diff) | |
download | chromium_src-549b7e2b1e215aba3617e346c822272e1ec8f04f.zip chromium_src-549b7e2b1e215aba3617e346c822272e1ec8f04f.tar.gz chromium_src-549b7e2b1e215aba3617e346c822272e1ec8f04f.tar.bz2 |
Revert 85257 - Removing DeleteSoon() from WigetGtk so it behaves like WidgetWin
This is a retry of http://codereview.chromium.org/7002029/ after it has been reverted because of the failing test BrowserTest.CloseWithAppMenuOpen (failed only on buildbot)
BUG=chromium-os:15129
TEST=tests
TBR=dpolukhin
TBR=glotov@google.com
Review URL: http://codereview.chromium.org/7016033
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85262 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/widget_gtk.cc')
-rw-r--r-- | views/widget/widget_gtk.cc | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc index 6fe0248..b506dac 100644 --- a/views/widget/widget_gtk.cc +++ b/views/widget/widget_gtk.cc @@ -322,9 +322,6 @@ WidgetGtk::WidgetGtk() } WidgetGtk::~WidgetGtk() { - LOG(ERROR) << this << " WidgetGtk::~WidgetGtk()"; // FIXME - if (!delete_on_destroy_ && widget_) - CloseNow(); // We need to delete the input method before calling DestroyRootView(), // because it'll set focus_manager_ to NULL. input_method_.reset(); @@ -903,16 +900,15 @@ void WidgetGtk::MoveAbove(gfx::NativeView native_view) { } void WidgetGtk::SetShape(gfx::NativeRegion region) { - if (widget_ && widget_->window) { - gdk_window_shape_combine_region(widget_->window, region, 0, 0); - gdk_region_destroy(region); - } + DCHECK(widget_); + DCHECK(widget_->window); + gdk_window_shape_combine_region(widget_->window, region, 0, 0); + gdk_region_destroy(region); } void WidgetGtk::Close() { if (!widget_) return; // No need to do anything. - LOG(ERROR) << this << " WidgetGtk::Close()"; // FIXME // Hide first. Hide(); @@ -1308,16 +1304,17 @@ void WidgetGtk::OnGrabNotify(GtkWidget* widget, gboolean was_grabbed) { } void WidgetGtk::OnDestroy(GtkWidget* object) { - LOG(ERROR) << this << " WidgetGtk::OnDestroy" << delete_on_destroy_; // FIXME if (!child_) ActiveWindowWatcherX::RemoveObserver(this); // Note that this handler is hooked to GtkObject::destroy. // NULL out pointers here since we might still be in an observerer list // until delstion happens. widget_ = window_contents_ = NULL; - OnDestroyed(); - if (delete_on_destroy_) - delete this; + if (delete_on_destroy_) { + // Delays the deletion of this WidgetGtk as we want its children to have + // access to it when destroyed. + MessageLoop::current()->DeleteSoon(FROM_HERE, this); + } } void WidgetGtk::OnShow(GtkWidget* widget) { |