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

Unified Diff: chrome/browser/chromeos/options/network_config_view.cc

Issue 10392097: Prevent showing multiple network config views. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/options/network_config_view.cc
diff --git a/chrome/browser/chromeos/options/network_config_view.cc b/chrome/browser/chromeos/options/network_config_view.cc
index f7d5fde92a527ca43ce40e6f098b695be1e81b46..dc9bb8deb1bf1786fb0c06a140c63c4a5f61832e 100644
--- a/chrome/browser/chromeos/options/network_config_view.cc
+++ b/chrome/browser/chromeos/options/network_config_view.cc
@@ -8,8 +8,13 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/chromeos/login/base_login_display_host.h"
#include "chrome/browser/chromeos/options/vpn_config_view.h"
#include "chrome/browser/chromeos/options/wifi_config_view.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/browser_window.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
@@ -25,6 +30,36 @@
#include "ui/views/layout/layout_constants.h"
#include "ui/views/widget/widget.h"
+namespace {
+
+gfx::NativeWindow GetDialogParent() {
+ if (chromeos::BaseLoginDisplayHost::default_host()) {
+ return chromeos::BaseLoginDisplayHost::default_host()->GetNativeWindow();
+ } else {
+ Browser* browser = BrowserList::FindTabbedBrowser(
+ ProfileManager::GetDefaultProfileOrOffTheRecord(), true);
+ if (browser)
+ return browser->window()->GetNativeHandle();
+ }
+ return NULL;
+}
+
+// Avoid global static initializer.
+chromeos::NetworkConfigView** GetActiveDialogPointer() {
+ static chromeos::NetworkConfigView* active_dialog = NULL;
+ return &active_dialog;
+}
+
+chromeos::NetworkConfigView* GetActiveDialog() {
+ return *(GetActiveDialogPointer());
+}
+
+void SetActiveDialog(chromeos::NetworkConfigView* dialog) {
+ *(GetActiveDialogPointer()) = dialog;
+}
+
+} // namespace
+
namespace chromeos {
// static
@@ -34,6 +69,8 @@ NetworkConfigView::NetworkConfigView(Network* network)
: delegate_(NULL),
advanced_button_(NULL),
advanced_button_container_(NULL) {
+ DCHECK(GetActiveDialog() == NULL);
+ SetActiveDialog(this);
if (network->type() == TYPE_WIFI) {
child_config_view_ =
new WifiConfigView(this, static_cast<WifiNetwork*>(network));
@@ -50,6 +87,8 @@ NetworkConfigView::NetworkConfigView(ConnectionType type)
: delegate_(NULL),
advanced_button_(NULL),
advanced_button_container_(NULL) {
+ DCHECK(GetActiveDialog() == NULL);
+ SetActiveDialog(this);
if (type == TYPE_WIFI) {
child_config_view_ = new WifiConfigView(this, false /* show_8021x */);
CreateAdvancedButton();
@@ -61,6 +100,38 @@ NetworkConfigView::NetworkConfigView(ConnectionType type)
}
}
+NetworkConfigView::~NetworkConfigView() {
+ DCHECK(GetActiveDialog() == this);
+ SetActiveDialog(NULL);
+}
+
+// static
+bool NetworkConfigView::Show(Network* network, gfx::NativeWindow parent) {
+ if (GetActiveDialog() != NULL)
+ return false;
+ NetworkConfigView* view = new NetworkConfigView(network);
+ if (parent == NULL)
+ parent = GetDialogParent();
+ views::Widget* window = views::Widget::CreateWindowWithParent(view, parent);
+ window->SetAlwaysOnTop(true);
+ window->Show();
+ return true;
+}
+
+// static
+bool NetworkConfigView::ShowForType(ConnectionType type,
+ gfx::NativeWindow parent) {
+ if (GetActiveDialog() != NULL)
+ return false;
+ NetworkConfigView* view = new NetworkConfigView(type);
+ if (parent == NULL)
+ parent = GetDialogParent();
+ views::Widget* window = views::Widget::CreateWindowWithParent(view, parent);
+ window->SetAlwaysOnTop(true);
+ window->Show();
+ return true;
+}
+
gfx::NativeWindow NetworkConfigView::GetNativeWindow() const {
return GetWidget()->GetNativeWindow();
}
« no previous file with comments | « chrome/browser/chromeos/options/network_config_view.h ('k') | chrome/browser/chromeos/status/network_menu.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698