diff options
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); +} |