Index: chrome/browser/gtk/options/options_window_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/options/options_window_gtk.cc (revision 71352) |
+++ chrome/browser/gtk/options/options_window_gtk.cc (working copy) |
@@ -1,267 +0,0 @@ |
-// Copyright (c) 2010 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 <gtk/gtk.h> |
- |
-#include "app/l10n_util.h" |
-#include "base/message_loop.h" |
-#include "base/scoped_ptr.h" |
-#include "chrome/browser/accessibility_events.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/gtk/accessible_widget_helper_gtk.h" |
-#include "chrome/browser/gtk/gtk_util.h" |
-#include "chrome/browser/gtk/options/advanced_page_gtk.h" |
-#include "chrome/browser/gtk/options/content_page_gtk.h" |
-#include "chrome/browser/gtk/options/general_page_gtk.h" |
-#include "chrome/browser/prefs/pref_member.h" |
-#include "chrome/browser/prefs/pref_service.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/browser_list.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/browser/ui/options/options_window.h" |
-#include "chrome/browser/ui/window_sizer.h" |
-#include "chrome/common/pref_names.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
- |
-#if defined(OS_CHROMEOS) |
-#include "chrome/browser/chromeos/options/internet_page_view.h" |
-#include "chrome/browser/chromeos/options/system_page_view.h" |
-#endif |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// OptionsWindowGtk |
-// |
-// The contents of the Options dialog window. |
- |
-class OptionsWindowGtk { |
- public: |
- explicit OptionsWindowGtk(Profile* profile); |
- ~OptionsWindowGtk(); |
- |
- // Shows the Tab corresponding to the specified OptionsPage. |
- void ShowOptionsPage(OptionsPage page, OptionsGroup highlight_group); |
- |
- private: |
- static void OnSwitchPage(GtkNotebook* notebook, GtkNotebookPage* page, |
- guint page_num, OptionsWindowGtk* window); |
- |
- static void OnWindowDestroy(GtkWidget* widget, OptionsWindowGtk* window); |
- |
- // The options dialog. |
- GtkWidget* dialog_; |
- |
- // The container of the option pages. |
- GtkWidget* notebook_; |
- |
- // The Profile associated with these options. |
- Profile* profile_; |
- |
- // The general page. |
- GeneralPageGtk general_page_; |
- |
- // The content page. |
- ContentPageGtk content_page_; |
- |
- // The advanced (user data) page. |
- AdvancedPageGtk advanced_page_; |
- |
- // The last page the user was on when they opened the Options window. |
- IntegerPrefMember last_selected_page_; |
- |
- scoped_ptr<AccessibleWidgetHelper> accessible_widget_helper_; |
- |
- DISALLOW_COPY_AND_ASSIGN(OptionsWindowGtk); |
-}; |
- |
-// The singleton options window object. |
-static OptionsWindowGtk* options_window = NULL; |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// OptionsWindowGtk, public: |
- |
-OptionsWindowGtk::OptionsWindowGtk(Profile* profile) |
- // Always show preferences for the original profile. Most state when off |
- // the record comes from the original profile, but we explicitly use |
- // the original profile to avoid potential problems. |
- : profile_(profile->GetOriginalProfile()), |
- general_page_(profile_), |
- content_page_(profile_), |
- advanced_page_(profile_) { |
- |
- // We don't need to observe changes in this value. |
- last_selected_page_.Init(prefs::kOptionsWindowLastTabIndex, |
- g_browser_process->local_state(), NULL); |
- |
- std::string dialog_name = |
- l10n_util::GetStringFUTF8( |
- IDS_PREFERENCES_DIALOG_TITLE, |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
- dialog_ = gtk_dialog_new_with_buttons( |
- dialog_name.c_str(), |
- // Prefs window is shared between all browser windows. |
- NULL, |
- // Non-modal. |
- GTK_DIALOG_NO_SEPARATOR, |
- GTK_STOCK_CLOSE, |
- GTK_RESPONSE_CLOSE, |
- NULL); |
- |
- accessible_widget_helper_.reset(new AccessibleWidgetHelper( |
- dialog_, profile)); |
- accessible_widget_helper_->SendOpenWindowNotification(dialog_name); |
- |
- gtk_window_set_default_size(GTK_WINDOW(dialog_), 500, -1); |
- // Allow browser windows to go in front of the options dialog in metacity. |
- gtk_window_set_type_hint(GTK_WINDOW(dialog_), GDK_WINDOW_TYPE_HINT_NORMAL); |
- gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), |
- gtk_util::kContentAreaSpacing); |
- |
- notebook_ = gtk_notebook_new(); |
- |
-#if defined(OS_CHROMEOS) |
- gtk_notebook_append_page( |
- GTK_NOTEBOOK(notebook_), |
- (new chromeos::SystemPageView(profile_))->WrapInGtkWidget(), |
- gtk_label_new( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_SYSTEM_TAB_LABEL).c_str())); |
- |
- gtk_notebook_append_page( |
- GTK_NOTEBOOK(notebook_), |
- (new chromeos::InternetPageView(profile_))->WrapInGtkWidget(), |
- gtk_label_new( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_INTERNET_TAB_LABEL).c_str())); |
-#endif |
- |
- gtk_notebook_append_page( |
- GTK_NOTEBOOK(notebook_), |
- general_page_.get_page_widget(), |
- gtk_label_new( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_GENERAL_TAB_LABEL).c_str())); |
- |
- gtk_notebook_append_page( |
- GTK_NOTEBOOK(notebook_), |
- content_page_.get_page_widget(), |
- gtk_label_new( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_CONTENT_TAB_LABEL).c_str())); |
- |
- gtk_notebook_append_page( |
- GTK_NOTEBOOK(notebook_), |
- advanced_page_.get_page_widget(), |
- gtk_label_new( |
- l10n_util::GetStringUTF8(IDS_OPTIONS_ADVANCED_TAB_LABEL).c_str())); |
- |
- gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog_)->vbox), notebook_); |
- |
- DCHECK_EQ( |
- gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook_)), OPTIONS_PAGE_COUNT); |
- |
- // Show the content so that we can compute full dialog size, both |
- // for centering and because we want to show the notebook before |
- // connecting switch-page signal, otherwise we'll immediately get a |
- // signal switching to page 0 and overwrite our last_selected_page_ |
- // value. |
- gtk_widget_show_all(gtk_bin_get_child(GTK_BIN(dialog_))); |
- |
- if (Browser* b = BrowserList::GetLastActive()) { |
- gtk_util::CenterOverWindow(GTK_WINDOW(dialog_), |
- b->window()->GetNativeHandle()); |
- } |
- |
- // Now that we're centered over the browser, we add our dialog to its own |
- // window group. We don't do anything with the response and we don't want the |
- // options window's modal dialogs to be associated with the main browser |
- // window because gtk grabs work on a per window group basis. |
- gtk_window_group_add_window(gtk_window_group_new(), GTK_WINDOW(dialog_)); |
- g_object_unref(gtk_window_get_group(GTK_WINDOW(dialog_))); |
- |
- g_signal_connect(notebook_, "switch-page", G_CALLBACK(OnSwitchPage), this); |
- |
- // We only have one button and don't do any special handling, so just hook it |
- // directly to gtk_widget_destroy. |
- g_signal_connect(dialog_, "response", G_CALLBACK(gtk_widget_destroy), NULL); |
- |
- g_signal_connect(dialog_, "destroy", G_CALLBACK(OnWindowDestroy), this); |
- |
- gtk_widget_show(dialog_); |
-} |
- |
-OptionsWindowGtk::~OptionsWindowGtk() { |
-} |
- |
-void OptionsWindowGtk::ShowOptionsPage(OptionsPage page, |
- OptionsGroup highlight_group) { |
- if (Browser* b = BrowserList::GetLastActive()) { |
- gtk_util::CenterOverWindow(GTK_WINDOW(dialog_), |
- b->window()->GetNativeHandle()); |
- } |
- |
- // Bring options window to front if it already existed and isn't already |
- // in front |
- gtk_window_present_with_time(GTK_WINDOW(dialog_), |
- gtk_get_current_event_time()); |
- |
- if (page == OPTIONS_PAGE_DEFAULT) { |
- // Remember the last visited page from local state. |
- page = static_cast<OptionsPage>(last_selected_page_.GetValue()); |
- if (page == OPTIONS_PAGE_DEFAULT) |
- page = OPTIONS_PAGE_GENERAL; |
- } |
- // If the page number is out of bounds, reset to the first tab. |
- if (page < 0 || page >= gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook_))) |
- page = OPTIONS_PAGE_GENERAL; |
- |
- gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook_), page); |
- |
- // TODO(mattm): set highlight_group |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// OptionsWindowGtk, private: |
- |
-// static |
-void OptionsWindowGtk::OnSwitchPage(GtkNotebook* notebook, |
- GtkNotebookPage* page, |
- guint page_num, |
- OptionsWindowGtk* window) { |
- int index = page_num; |
- DCHECK(index > OPTIONS_PAGE_DEFAULT && index < OPTIONS_PAGE_COUNT); |
- window->last_selected_page_.SetValue(index); |
-} |
- |
-// static |
-void OptionsWindowGtk::OnWindowDestroy(GtkWidget* widget, |
- OptionsWindowGtk* window) { |
- options_window = NULL; |
- MessageLoop::current()->DeleteSoon(FROM_HERE, window); |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
-// Factory/finder method: |
- |
-#if !defined(OS_CHROMEOS) |
-// ShowOptionsWindow for non ChromeOS build. For ChromeOS build, see |
-// chrome/browser/chromeos/options/options_window_view.h |
-void ShowOptionsWindow(OptionsPage page, |
- OptionsGroup highlight_group, |
- Profile* profile) { |
- DCHECK(profile); |
- |
- // If there's already an existing options window, activate it and switch to |
- // the specified page. |
- if (!options_window) { |
- // Creating and initializing a bunch of controls generates a bunch of |
- // spurious events as control values change. Temporarily suppress |
- // accessibility events until the window is created. |
- profile->PauseAccessibilityEvents(); |
- |
- // Create the options window. |
- options_window = new OptionsWindowGtk(profile); |
- |
- // Resume accessibility events. |
- profile->ResumeAccessibilityEvents(); |
- } |
- options_window->ShowOptionsPage(page, highlight_group); |
-} |
-#endif // !defined(OS_CHROMEOS) |