diff options
author | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 21:48:08 +0000 |
---|---|---|
committer | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-24 21:48:08 +0000 |
commit | 6d2adbe35ab026b770c3de40cd648424f6aaadab (patch) | |
tree | f4e485571c831f0731b31ee304aa94a774840f59 /chrome/browser/browser_list_gtk.cc | |
parent | b1c7cc42d026a073d1db2e7fa293be525e936738 (diff) | |
download | chromium_src-6d2adbe35ab026b770c3de40cd648424f6aaadab.zip chromium_src-6d2adbe35ab026b770c3de40cd648424f6aaadab.tar.gz chromium_src-6d2adbe35ab026b770c3de40cd648424f6aaadab.tar.bz2 |
Implement BrowserList::AllBrowsersClosed for Linux.
This fixes leaks caused by not calling gtk_widget_destroy on
dialog windows when we exit.
While I'm here, fix a GList leak on Linux toolkit views.
Review URL: http://codereview.chromium.org/223015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27130 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_list_gtk.cc')
-rw-r--r-- | chrome/browser/browser_list_gtk.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/chrome/browser/browser_list_gtk.cc b/chrome/browser/browser_list_gtk.cc new file mode 100644 index 0000000..99a66dd --- /dev/null +++ b/chrome/browser/browser_list_gtk.cc @@ -0,0 +1,23 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/browser_list.h" + +#include <gtk/gtk.h> + +void BrowserList::AllBrowsersClosed() { + // Close non-browser windows. + GList* window_list = gtk_window_list_toplevels(); + g_list_foreach(window_list, (GFunc)g_object_ref, NULL); + for (GList* i = window_list; i != NULL; i = g_list_next(i)) { + GtkWindow* window = GTK_WINDOW(i->data); + // We filter by visible widgets because there are toplevel windows that if + // we try to destroy, we crash. For example, trying to destroy the tooltip + // window or the toplevel associated with drop down windows crashes. + if (GTK_WIDGET_VISIBLE(GTK_WIDGET(window))) + gtk_widget_destroy(GTK_WIDGET(window)); + } + g_list_foreach(window_list, (GFunc)g_object_unref, NULL); + g_list_free(window_list); +} |