summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwittman@chromium.org <wittman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-15 10:45:34 +0000
committerwittman@chromium.org <wittman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-15 10:45:34 +0000
commit723d521213dc5818e7ebf919703f59ed3cffaf69 (patch)
tree6a2950b2d11db1db63ebbca33658c0be4d7713d9
parentf2fba8ee9c9ed55f858bfd9e87705aa0ee81ae03 (diff)
downloadchromium_src-723d521213dc5818e7ebf919703f59ed3cffaf69.zip
chromium_src-723d521213dc5818e7ebf919703f59ed3cffaf69.tar.gz
chromium_src-723d521213dc5818e7ebf919703f59ed3cffaf69.tar.bz2
Remove ConstrainedWindowGtkDelegate
Part 3/5 of the Gtk ContstrainedWindow API rework towards removing ConstrainedWindowGtk in favor of using a native Widget. Use "destroy" signal to destroy web contents modal dialog contents classes, rather than explicit requests from ConstrainedWindowGtk. Remove ConstrainedWindowGtkDelegate. BUG=157161 Review URL: https://chromiumcodereview.appspot.com/12851002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188325 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/gtk/collected_cookies_gtk.cc21
-rw-r--r--chrome/browser/ui/gtk/collected_cookies_gtk.h9
-rw-r--r--chrome/browser/ui/gtk/constrained_web_dialog_delegate_gtk.cc49
-rw-r--r--chrome/browser/ui/gtk/constrained_window_gtk.cc46
-rw-r--r--chrome/browser/ui/gtk/constrained_window_gtk.h29
-rw-r--r--chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc24
-rw-r--r--chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h10
-rw-r--r--chrome/browser/ui/gtk/login_prompt_gtk.cc39
-rw-r--r--chrome/browser/ui/gtk/ssl_client_certificate_selector.cc35
-rw-r--r--chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc2
-rw-r--r--chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.h4
-rw-r--r--chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc20
-rw-r--r--chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.h9
13 files changed, 117 insertions, 180 deletions
diff --git a/chrome/browser/ui/gtk/collected_cookies_gtk.cc b/chrome/browser/ui/gtk/collected_cookies_gtk.cc
index d38e2af..46de438 100644
--- a/chrome/browser/ui/gtk/collected_cookies_gtk.cc
+++ b/chrome/browser/ui/gtk/collected_cookies_gtk.cc
@@ -121,6 +121,7 @@ CollectedCookiesGtk::CollectedCookiesGtk(GtkWindow* parent,
void CollectedCookiesGtk::Init() {
dialog_ = gtk_vbox_new(FALSE, ui::kContentAreaSpacing);
gtk_box_set_spacing(GTK_BOX(dialog_), ui::kContentAreaSpacing);
+ g_signal_connect(dialog_, "destroy", G_CALLBACK(OnDestroyThunk), this);
GtkWidget* label = gtk_label_new(
l10n_util::GetStringUTF8(IDS_COLLECTED_COOKIES_DIALOG_TITLE).c_str());
@@ -190,7 +191,9 @@ void CollectedCookiesGtk::Init() {
blocked_cookies_tree_adapter_->Init();
EnableControls();
ShowCookieInfo(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_)));
- window_ = CreateWebContentsModalDialogGtk(web_contents_, this);
+ window_ = CreateWebContentsModalDialogGtk(web_contents_,
+ dialog_,
+ close_button_);
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(web_contents_);
@@ -400,18 +403,6 @@ CollectedCookiesGtk::~CollectedCookiesGtk() {
gtk_widget_destroy(dialog_);
}
-GtkWidget* CollectedCookiesGtk::GetWidgetRoot() {
- return dialog_;
-}
-
-GtkWidget* CollectedCookiesGtk::GetFocusWidget() {
- return close_button_;
-}
-
-void CollectedCookiesGtk::DeleteDelegate() {
- delete this;
-}
-
bool CollectedCookiesGtk::SelectionContainsHostNode(
GtkTreeSelection* selection, gtk_tree::TreeAdapter* adapter) {
// Check whether at least one "origin" node is selected.
@@ -550,3 +541,7 @@ void CollectedCookiesGtk::OnTreeViewSelectionChange(GtkWidget* selection) {
EnableControls();
ShowCookieInfo(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_)));
}
+
+void CollectedCookiesGtk::OnDestroy(GtkWidget* widget) {
+ delete this;
+}
diff --git a/chrome/browser/ui/gtk/collected_cookies_gtk.h b/chrome/browser/ui/gtk/collected_cookies_gtk.h
index 208b6d3c..e951400 100644
--- a/chrome/browser/ui/gtk/collected_cookies_gtk.h
+++ b/chrome/browser/ui/gtk/collected_cookies_gtk.h
@@ -29,17 +29,11 @@ class WebContents;
// ShowCollectedCookiesDialog() on the delegate of the web contents's
// content settings tab helper.
-class CollectedCookiesGtk : public ConstrainedWindowGtkDelegate,
- public gtk_tree::TreeAdapter::Delegate,
+class CollectedCookiesGtk : public gtk_tree::TreeAdapter::Delegate,
public content::NotificationObserver {
public:
CollectedCookiesGtk(GtkWindow* parent, content::WebContents* web_contents);
- // ConstrainedWindowGtkDelegate methods.
- virtual GtkWidget* GetWidgetRoot() OVERRIDE;
- virtual GtkWidget* GetFocusWidget() OVERRIDE;
- virtual void DeleteDelegate() OVERRIDE;
-
private:
virtual ~CollectedCookiesGtk();
@@ -84,6 +78,7 @@ class CollectedCookiesGtk : public ConstrainedWindowGtkDelegate,
OnForSessionBlockedButtonClicked);
CHROMEGTK_CALLBACK_2(CollectedCookiesGtk, void, OnSwitchPage,
gpointer, guint);
+ CHROMEGTK_CALLBACK_0(CollectedCookiesGtk, void, OnDestroy);
content::NotificationRegistrar registrar_;
diff --git a/chrome/browser/ui/gtk/constrained_web_dialog_delegate_gtk.cc b/chrome/browser/ui/gtk/constrained_web_dialog_delegate_gtk.cc
index a456722..679d429 100644
--- a/chrome/browser/ui/gtk/constrained_web_dialog_delegate_gtk.cc
+++ b/chrome/browser/ui/gtk/constrained_web_dialog_delegate_gtk.cc
@@ -45,11 +45,16 @@ class ConstrainedWebDialogDelegateGtk
DISALLOW_COPY_AND_ASSIGN(ConstrainedWebDialogDelegateGtk);
};
+void SetBackgroundColor(GtkWidget* widget, const GdkColor &color) {
+ gtk_widget_modify_base(widget, GTK_STATE_NORMAL, &color);
+ gtk_widget_modify_fg(widget, GTK_STATE_NORMAL, &color);
+ gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color);
+}
+
} // namespace
class ConstrainedWebDialogDelegateViewGtk
- : public ConstrainedWindowGtkDelegate,
- public ConstrainedWebDialogDelegate {
+ : public ConstrainedWebDialogDelegate {
public:
ConstrainedWebDialogDelegateViewGtk(
content::BrowserContext* browser_context,
@@ -79,23 +84,6 @@ class ConstrainedWebDialogDelegateViewGtk
return impl_->GetWebContents();
}
- // ConstrainedWindowGtkDelegate interface
- virtual GtkWidget* GetWidgetRoot() OVERRIDE {
- return GetWebContents()->GetView()->GetNativeView();
- }
- virtual GtkWidget* GetFocusWidget() OVERRIDE {
- return GetWebContents()->GetView()->GetContentNativeView();
- }
- virtual void DeleteDelegate() OVERRIDE {
- if (!impl_->closed_via_webui())
- GetWebDialogDelegate()->OnDialogClosed("");
- delete this;
- }
- virtual bool GetBackgroundColor(GdkColor* color) OVERRIDE {
- *color = ui::kGdkWhite;
- return true;
- }
-
void SetWindow(GtkWidget* window) {
impl_->set_window(window);
}
@@ -105,6 +93,8 @@ class ConstrainedWebDialogDelegateViewGtk
}
private:
+ CHROMEGTK_CALLBACK_0(ConstrainedWebDialogDelegateViewGtk, void, OnDestroy);
+
scoped_ptr<ConstrainedWebDialogDelegateGtk> impl_;
DISALLOW_COPY_AND_ASSIGN(ConstrainedWebDialogDelegateViewGtk);
@@ -120,11 +110,21 @@ ConstrainedWebDialogDelegateViewGtk::ConstrainedWebDialogDelegateViewGtk(
tab_delegate)) {
gfx::Size dialog_size;
delegate->GetDialogSize(&dialog_size);
- gtk_widget_set_size_request(GTK_WIDGET(GetWidgetRoot()),
+ GtkWidget* contents =
+ GTK_WIDGET(GetWebContents()->GetView()->GetNativeView());
+ gtk_widget_set_size_request(contents,
dialog_size.width(),
dialog_size.height());
- gtk_widget_show_all(GetWidgetRoot());
+ gtk_widget_show_all(contents);
+
+ g_signal_connect(contents, "destroy", G_CALLBACK(OnDestroyThunk), this);
+}
+
+void ConstrainedWebDialogDelegateViewGtk::OnDestroy(GtkWidget* widget) {
+ if (!impl_->closed_via_webui())
+ GetWebDialogDelegate()->OnDialogClosed("");
+ delete this;
}
ConstrainedWebDialogDelegate* CreateConstrainedWebDialog(
@@ -136,7 +136,12 @@ ConstrainedWebDialogDelegate* CreateConstrainedWebDialog(
new ConstrainedWebDialogDelegateViewGtk(
browser_context, delegate, tab_delegate);
GtkWidget* window =
- CreateWebContentsModalDialogGtk(web_contents, constrained_delegate);
+ CreateWebContentsModalDialogGtk(
+ web_contents,
+ constrained_delegate->GetWebContents()->GetView()->GetNativeView(),
+ constrained_delegate->GetWebContents()->GetView()->
+ GetContentNativeView());
+ SetBackgroundColor(window, ui::kGdkWhite);
constrained_delegate->SetWindow(window);
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
diff --git a/chrome/browser/ui/gtk/constrained_window_gtk.cc b/chrome/browser/ui/gtk/constrained_window_gtk.cc
index dbc1e29..2b69014 100644
--- a/chrome/browser/ui/gtk/constrained_window_gtk.cc
+++ b/chrome/browser/ui/gtk/constrained_window_gtk.cc
@@ -21,22 +21,14 @@
using content::BrowserThread;
-ConstrainedWindowGtkDelegate::~ConstrainedWindowGtkDelegate() {
-}
-
-bool ConstrainedWindowGtkDelegate::GetBackgroundColor(GdkColor* color) {
- return false;
-}
-
ConstrainedWindowGtk::ConstrainedWindowGtk(
content::WebContents* web_contents,
- ConstrainedWindowGtkDelegate* delegate)
+ GtkWidget* contents,
+ GtkWidget* focus_widget)
: web_contents_(web_contents),
- delegate_(delegate),
+ focus_widget_(focus_widget),
visible_(false) {
DCHECK(web_contents);
- DCHECK(delegate);
- GtkWidget* dialog = delegate->GetWidgetRoot();
// Unlike other users of CreateBorderBin, we need a dedicated frame around
// our "window".
@@ -50,23 +42,16 @@ ConstrainedWindowGtk::ConstrainedWindowGtk(
ui::kContentAreaBorder, ui::kContentAreaBorder,
ui::kContentAreaBorder, ui::kContentAreaBorder);
- if (gtk_widget_get_parent(dialog))
- gtk_widget_reparent(dialog, alignment);
+ if (gtk_widget_get_parent(contents))
+ gtk_widget_reparent(contents, alignment);
else
- gtk_container_add(GTK_CONTAINER(alignment), dialog);
+ gtk_container_add(GTK_CONTAINER(alignment), contents);
gtk_container_add(GTK_CONTAINER(frame), alignment);
gtk_container_add(GTK_CONTAINER(border_), frame);
- GdkColor background;
- if (delegate_->GetBackgroundColor(&background)) {
- gtk_widget_modify_base(border_, GTK_STATE_NORMAL, &background);
- gtk_widget_modify_fg(border_, GTK_STATE_NORMAL, &background);
- gtk_widget_modify_bg(border_, GTK_STATE_NORMAL, &background);
- }
-
- gtk_widget_add_events(border_, GDK_KEY_PRESS_MASK);
- g_signal_connect(border_, "key-press-event", G_CALLBACK(OnKeyPressThunk),
+ gtk_widget_add_events(widget(), GDK_KEY_PRESS_MASK);
+ g_signal_connect(widget(), "key-press-event", G_CALLBACK(OnKeyPressThunk),
this);
g_signal_connect(border_, "hierarchy-changed",
G_CALLBACK(OnHierarchyChangedThunk), this);
@@ -93,16 +78,15 @@ void ConstrainedWindowGtk::ShowWebContentsModalDialog() {
}
void ConstrainedWindowGtk::FocusWebContentsModalDialog() {
- GtkWidget* focus_widget = delegate_->GetFocusWidget();
- if (!focus_widget)
+ if (!focus_widget_)
return;
// The user may have focused another tab. In this case do not grab focus
// until this tab is refocused.
- if (gtk_util::IsWidgetAncestryVisible(focus_widget))
- gtk_widget_grab_focus(focus_widget);
+ if (gtk_util::IsWidgetAncestryVisible(focus_widget_))
+ gtk_widget_grab_focus(focus_widget_);
else
- ContainingView()->focus_store()->SetWidget(focus_widget);
+ ContainingView()->focus_store()->SetWidget(focus_widget_);
}
void ConstrainedWindowGtk::PulseWebContentsModalDialog() {
@@ -140,7 +124,6 @@ void ConstrainedWindowGtk::OnHierarchyChanged(GtkWidget* sender,
void ConstrainedWindowGtk::OnDestroy(GtkWidget* sender) {
if (visible_)
ContainingView()->RemoveWebContentsModalDialog(border_);
- delegate_->DeleteDelegate();
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(web_contents_);
web_contents_modal_dialog_manager->WillClose(border_);
@@ -153,8 +136,9 @@ void ConstrainedWindowGtk::OnDestroy(GtkWidget* sender) {
GtkWidget* CreateWebContentsModalDialogGtk(
content::WebContents* web_contents,
- ConstrainedWindowGtkDelegate* delegate) {
+ GtkWidget* contents,
+ GtkWidget* focus_widget) {
ConstrainedWindowGtk* window =
- new ConstrainedWindowGtk(web_contents, delegate);
+ new ConstrainedWindowGtk(web_contents, contents, focus_widget);
return window->widget();
}
diff --git a/chrome/browser/ui/gtk/constrained_window_gtk.h b/chrome/browser/ui/gtk/constrained_window_gtk.h
index 92884db..5d783bac 100644
--- a/chrome/browser/ui/gtk/constrained_window_gtk.h
+++ b/chrome/browser/ui/gtk/constrained_window_gtk.h
@@ -20,25 +20,6 @@ namespace content {
class WebContents;
}
-class ConstrainedWindowGtkDelegate {
- public:
- // Returns the widget that will be put in the constrained window's container.
- virtual GtkWidget* GetWidgetRoot() = 0;
-
- // Returns the widget that should get focus when ConstrainedWindowGtk is
- // focused.
- virtual GtkWidget* GetFocusWidget() = 0;
-
- // Tells the delegate to either delete itself or set up a task to delete
- // itself later.
- virtual void DeleteDelegate() = 0;
-
- virtual bool GetBackgroundColor(GdkColor* color);
-
- protected:
- virtual ~ConstrainedWindowGtkDelegate();
-};
-
// Web contents modal dialog implementation for the GTK port. Unlike the Win32
// system, ConstrainedWindowGtk doesn't draw draggable fake windows and instead
// just centers the dialog. It is thus an order of magnitude simpler.
@@ -47,7 +28,8 @@ class ConstrainedWindowGtk {
typedef ChromeWebContentsViewDelegateGtk TabContentsViewType;
ConstrainedWindowGtk(content::WebContents* web_contents,
- ConstrainedWindowGtkDelegate* delegate);
+ GtkWidget* contents,
+ GtkWidget* focus_widget);
virtual ~ConstrainedWindowGtk();
void ShowWebContentsModalDialog();
@@ -75,8 +57,8 @@ class ConstrainedWindowGtk {
// The top level widget container that exports to our WebContentsView.
GtkWidget* border_;
- // Delegate that provides the contents of this constrained window.
- ConstrainedWindowGtkDelegate* delegate_;
+ // The widget that should get focus when ConstrainedWindowGtk is focused.
+ GtkWidget* focus_widget_;
// Stores if |ShowWebContentsModalDialog()| has been called.
bool visible_;
@@ -86,6 +68,7 @@ class ConstrainedWindowGtk {
GtkWidget* CreateWebContentsModalDialogGtk(
content::WebContents* web_contents,
- ConstrainedWindowGtkDelegate* delegate);
+ GtkWidget* contents,
+ GtkWidget* focus_widget);
#endif // CHROME_BROWSER_UI_GTK_CONSTRAINED_WINDOW_GTK_H_
diff --git a/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc b/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc
index abbb1b9..a49609c 100644
--- a/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc
+++ b/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.cc
@@ -30,7 +30,9 @@ MediaGalleriesDialogGtk::MediaGalleriesDialogGtk(
// May be NULL during tests.
if (controller->web_contents()) {
- window_ = CreateWebContentsModalDialogGtk(controller->web_contents(), this);
+ window_ = CreateWebContentsModalDialogGtk(controller->web_contents(),
+ contents_.get(),
+ confirm_);
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(
@@ -44,6 +46,10 @@ MediaGalleriesDialogGtk::~MediaGalleriesDialogGtk() {
void MediaGalleriesDialogGtk::InitWidgets() {
contents_.Own(gtk_vbox_new(FALSE, ui::kContentAreaSpacing));
+ g_signal_connect(contents_.get(),
+ "destroy",
+ G_CALLBACK(OnDestroyThunk),
+ this);
GtkWidget* header =
gtk_util::CreateBoldLabel(UTF16ToUTF8(controller_->GetHeader()));
@@ -135,18 +141,6 @@ void MediaGalleriesDialogGtk::ForgetGallery(
checkbox_map_.erase(iter);
}
-GtkWidget* MediaGalleriesDialogGtk::GetWidgetRoot() {
- return contents_.get();
-}
-
-GtkWidget* MediaGalleriesDialogGtk::GetFocusWidget() {
- return confirm_;
-}
-
-void MediaGalleriesDialogGtk::DeleteDelegate() {
- controller_->DialogFinished(accepted_);
-}
-
void MediaGalleriesDialogGtk::OnToggled(GtkWidget* widget) {
if (confirm_)
gtk_widget_set_sensitive(confirm_, TRUE);
@@ -180,6 +174,10 @@ void MediaGalleriesDialogGtk::OnCancel(GtkWidget* widget) {
gtk_widget_destroy(window_);
}
+void MediaGalleriesDialogGtk::OnDestroy(GtkWidget* widget) {
+ controller_->DialogFinished(accepted_);
+}
+
// MediaGalleriesDialogController ----------------------------------------------
// static
diff --git a/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h b/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h
index 113c89d..dab8248 100644
--- a/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h
+++ b/chrome/browser/ui/gtk/extensions/media_galleries_dialog_gtk.h
@@ -23,8 +23,7 @@ class MediaGalleriesDialogTest;
// The media galleries configuration view for Gtk. It will immediately show
// upon construction.
-class MediaGalleriesDialogGtk : public MediaGalleriesDialog,
- public ConstrainedWindowGtkDelegate {
+class MediaGalleriesDialogGtk : public MediaGalleriesDialog {
public:
explicit MediaGalleriesDialogGtk(MediaGalleriesDialogController* controller);
virtual ~MediaGalleriesDialogGtk();
@@ -34,11 +33,6 @@ class MediaGalleriesDialogGtk : public MediaGalleriesDialog,
bool permitted) OVERRIDE;
virtual void ForgetGallery(const MediaGalleryPrefInfo* gallery) OVERRIDE;
- // ConstrainedWindowGtkDelegate implementation:
- virtual GtkWidget* GetWidgetRoot() OVERRIDE;
- virtual GtkWidget* GetFocusWidget() OVERRIDE;
- virtual void DeleteDelegate() OVERRIDE;
-
// Event callbacks.
CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnToggled);
CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnAddFolder);
@@ -59,6 +53,8 @@ class MediaGalleriesDialogGtk : public MediaGalleriesDialog,
// Updates the state of the confirm button. It will be disabled when
void UpdateConfirmButtonState();
+ CHROMEGTK_CALLBACK_0(MediaGalleriesDialogGtk, void, OnDestroy);
+
MediaGalleriesDialogController* controller_;
GtkWidget* window_;
diff --git a/chrome/browser/ui/gtk/login_prompt_gtk.cc b/chrome/browser/ui/gtk/login_prompt_gtk.cc
index e3f501b..ed523fd 100644
--- a/chrome/browser/ui/gtk/login_prompt_gtk.cc
+++ b/chrome/browser/ui/gtk/login_prompt_gtk.cc
@@ -36,8 +36,7 @@ using content::WebContents;
// the UI thread) to the net::URLRequest (on the I/O thread).
// This class uses ref counting to ensure that it lives until all InvokeLaters
// have been called.
-class LoginHandlerGtk : public LoginHandler,
- public ConstrainedWindowGtkDelegate {
+class LoginHandlerGtk : public LoginHandler {
public:
LoginHandlerGtk(net::AuthChallengeInfo* auth_info, net::URLRequest* request)
: LoginHandler(auth_info, request),
@@ -70,6 +69,8 @@ class LoginHandlerGtk : public LoginHandler,
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
root_.Own(gtk_vbox_new(FALSE, ui::kContentAreaBorder));
+ g_signal_connect(root_.get(), "destroy", G_CALLBACK(OnDestroyThunk), this);
+
GtkWidget* label = gtk_label_new(UTF16ToUTF8(explanation).c_str());
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_box_pack_start(GTK_BOX(root_.get()), label, FALSE, FALSE, 0);
@@ -116,7 +117,9 @@ class LoginHandlerGtk : public LoginHandler,
WebContents* requesting_contents = GetWebContentsForLogin();
DCHECK(requesting_contents);
- dialog_ = CreateWebContentsModalDialogGtk(requesting_contents, this);
+ dialog_ = CreateWebContentsModalDialogGtk(requesting_contents,
+ root_.get(),
+ username_entry_);
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(requesting_contents);
@@ -131,25 +134,6 @@ class LoginHandlerGtk : public LoginHandler,
gtk_widget_destroy(dialog_);
}
- // Overridden from ConstrainedWindowGtkDelegate:
- virtual GtkWidget* GetWidgetRoot() OVERRIDE {
- return root_.get();
- }
-
- virtual GtkWidget* GetFocusWidget() OVERRIDE {
- return username_entry_;
- }
-
- virtual void DeleteDelegate() OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- // The constrained window is going to delete itself; clear our pointer.
- dialog_ = NULL;
- SetModel(NULL);
-
- ReleaseSoon();
- }
-
protected:
virtual ~LoginHandlerGtk() {
root_.Destroy();
@@ -162,6 +146,7 @@ class LoginHandlerGtk : public LoginHandler,
CHROMEGTK_CALLBACK_0(LoginHandlerGtk, void, OnCancelClicked);
CHROMEGTK_CALLBACK_1(LoginHandlerGtk, void, OnPromptHierarchyChanged,
GtkWidget*);
+ CHROMEGTK_CALLBACK_0(LoginHandlerGtk, void, OnDestroy);
// The GtkWidgets that form our visual hierarchy:
// The root container we pass to our parent.
@@ -205,3 +190,13 @@ LoginHandler* LoginHandler::Create(net::AuthChallengeInfo* auth_info,
net::URLRequest* request) {
return new LoginHandlerGtk(auth_info, request);
}
+
+void LoginHandlerGtk::OnDestroy(GtkWidget* widget) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ // The web contents modal dialog is going to delete itself; clear our pointer.
+ dialog_ = NULL;
+ SetModel(NULL);
+
+ ReleaseSoon();
+}
diff --git a/chrome/browser/ui/gtk/ssl_client_certificate_selector.cc b/chrome/browser/ui/gtk/ssl_client_certificate_selector.cc
index 8c5e250..6fec1f2 100644
--- a/chrome/browser/ui/gtk/ssl_client_certificate_selector.cc
+++ b/chrome/browser/ui/gtk/ssl_client_certificate_selector.cc
@@ -43,8 +43,7 @@ enum {
///////////////////////////////////////////////////////////////////////////////
// SSLClientCertificateSelector
-class SSLClientCertificateSelector : public SSLClientAuthObserver,
- public ConstrainedWindowGtkDelegate {
+class SSLClientCertificateSelector : public SSLClientAuthObserver {
public:
explicit SSLClientCertificateSelector(
WebContents* parent,
@@ -58,11 +57,6 @@ class SSLClientCertificateSelector : public SSLClientAuthObserver,
// SSLClientAuthObserver implementation:
virtual void OnCertSelectedByNotification() OVERRIDE;
- // ConstrainedWindowGtkDelegate implementation:
- virtual GtkWidget* GetWidgetRoot() OVERRIDE { return root_widget_.get(); }
- virtual GtkWidget* GetFocusWidget() OVERRIDE;
- virtual void DeleteDelegate() OVERRIDE;
-
private:
void PopulateCerts();
@@ -83,6 +77,7 @@ class SSLClientCertificateSelector : public SSLClientAuthObserver,
CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnOkClicked);
CHROMEGTK_CALLBACK_1(SSLClientCertificateSelector, void, OnPromptShown,
GtkWidget*);
+ CHROMEGTK_CALLBACK_0(SSLClientCertificateSelector, void, OnDestroy);
std::vector<std::string> details_strings_;
@@ -108,6 +103,10 @@ SSLClientCertificateSelector::SSLClientCertificateSelector(
web_contents_(web_contents),
window_(NULL) {
root_widget_.Own(gtk_vbox_new(FALSE, ui::kControlSpacing));
+ g_signal_connect(root_widget_.get(),
+ "destroy",
+ G_CALLBACK(OnDestroyThunk),
+ this);
GtkWidget* site_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing);
gtk_box_pack_start(GTK_BOX(root_widget_.get()), site_vbox,
@@ -198,7 +197,9 @@ SSLClientCertificateSelector::~SSLClientCertificateSelector() {
void SSLClientCertificateSelector::Show() {
DCHECK(!window_);
- window_ = CreateWebContentsModalDialogGtk(web_contents_, this);
+ window_ = CreateWebContentsModalDialogGtk(web_contents_,
+ root_widget_.get(),
+ select_button_);
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
WebContentsModalDialogManager::FromWebContents(web_contents_);
@@ -210,17 +211,6 @@ void SSLClientCertificateSelector::OnCertSelectedByNotification() {
gtk_widget_destroy(window_);
}
-GtkWidget* SSLClientCertificateSelector::GetFocusWidget() {
- return select_button_;
-}
-
-void SSLClientCertificateSelector::DeleteDelegate() {
- // The dialog was closed by escape key.
- StopObserving();
- CertificateSelected(NULL);
- delete this;
-}
-
void SSLClientCertificateSelector::PopulateCerts() {
std::vector<std::string> nicknames;
x509_certificate_model::GetNicknameStringsFromCertList(
@@ -385,6 +375,13 @@ void SSLClientCertificateSelector::OnPromptShown(GtkWidget* widget,
gtk_widget_grab_default(select_button_);
}
+void SSLClientCertificateSelector::OnDestroy(GtkWidget* widget) {
+ // The dialog was closed by escape key.
+ StopObserving();
+ CertificateSelected(NULL);
+ delete this;
+}
+
} // namespace
namespace chrome {
diff --git a/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc b/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc
index 28c74f2..4a8eac8 100644
--- a/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc
+++ b/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc
@@ -52,6 +52,7 @@ ChromeWebContentsViewDelegateGtk::ChromeWebContentsViewDelegateGtk(
web_contents_(web_contents),
expanded_container_(NULL),
focus_store_(NULL) {
+ g_object_ref_sink(floating_.get());
gtk_widget_set_name(floating_.get(), "chrome-tab-contents-view");
g_signal_connect(floating_.get(), "set-floating-position",
G_CALLBACK(OnSetFloatingPositionThunk), this);
@@ -62,7 +63,6 @@ ChromeWebContentsViewDelegateGtk::ChromeWebContentsViewDelegateGtk(
}
ChromeWebContentsViewDelegateGtk::~ChromeWebContentsViewDelegateGtk() {
- floating_.Destroy();
}
void ChromeWebContentsViewDelegateGtk::AttachWebContentsModalDialog(
diff --git a/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.h b/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.h
index 95ce5b9..eac550f 100644
--- a/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.h
+++ b/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.h
@@ -9,7 +9,7 @@
#include "base/memory/scoped_ptr.h"
#include "content/public/browser/web_contents_view_delegate.h"
#include "ui/base/gtk/gtk_signal.h"
-#include "ui/base/gtk/owned_widget_gtk.h"
+#include "ui/base/gtk/scoped_gobject.h"
class RenderViewContextMenuGtk;
class WebDragBookmarkHandlerGtk;
@@ -57,7 +57,7 @@ class ChromeWebContentsViewDelegateGtk
GtkAllocation*);
// Contains |expanded_| as its GtkBin member.
- ui::OwnedWidgetGtk floating_;
+ ui::ScopedGObject<GtkWidget>::Type floating_;
// The UI for the web contents modal dialog currently displayed. This is owned
// by WebContents, not the view.
diff --git a/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc b/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc
index 6b214ae..55c70a7 100644
--- a/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc
+++ b/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc
@@ -71,7 +71,9 @@ TabModalConfirmDialogGtk::TabModalConfirmDialogGtk(
g_signal_connect(ok_, "clicked", G_CALLBACK(OnAcceptThunk), this);
gtk_box_pack_end(GTK_BOX(buttonBox), ok_, FALSE, TRUE, 0);
- window_ = CreateWebContentsModalDialogGtk(web_contents, this);
+ g_signal_connect(dialog_, "destroy", G_CALLBACK(OnDestroyThunk), this);
+
+ window_ = CreateWebContentsModalDialogGtk(web_contents, dialog_, cancel_);
delegate_->set_close_delegate(this);
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
@@ -79,18 +81,6 @@ TabModalConfirmDialogGtk::TabModalConfirmDialogGtk(
web_contents_modal_dialog_manager->ShowDialog(window_);
}
-GtkWidget* TabModalConfirmDialogGtk::GetWidgetRoot() {
- return dialog_;
-}
-
-GtkWidget* TabModalConfirmDialogGtk::GetFocusWidget() {
- return cancel_;
-}
-
-void TabModalConfirmDialogGtk::DeleteDelegate() {
- delete this;
-}
-
TabModalConfirmDialogGtk::~TabModalConfirmDialogGtk() {
gtk_widget_destroy(dialog_);
}
@@ -114,3 +104,7 @@ void TabModalConfirmDialogGtk::OnAccept(GtkWidget* widget) {
void TabModalConfirmDialogGtk::OnCancel(GtkWidget* widget) {
delegate_->Cancel();
}
+
+void TabModalConfirmDialogGtk::OnDestroy(GtkWidget* widget) {
+ delete this;
+}
diff --git a/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.h b/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.h
index 7fb7893..543d148 100644
--- a/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.h
+++ b/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.h
@@ -24,17 +24,11 @@ class WebContents;
// To display the dialog, allocate this object on the heap. It will open the
// dialog from its constructor and then delete itself when the user dismisses
// the dialog.
-class TabModalConfirmDialogGtk : public TabModalConfirmDialog,
- public ConstrainedWindowGtkDelegate {
+class TabModalConfirmDialogGtk : public TabModalConfirmDialog {
public:
TabModalConfirmDialogGtk(TabModalConfirmDialogDelegate* delegate,
content::WebContents* web_contents);
- // ConstrainedWindowGtkDelegate:
- virtual GtkWidget* GetWidgetRoot() OVERRIDE;
- virtual GtkWidget* GetFocusWidget() OVERRIDE;
- virtual void DeleteDelegate() OVERRIDE;
-
private:
friend class TabModalConfirmDialogTest;
@@ -50,6 +44,7 @@ class TabModalConfirmDialogGtk : public TabModalConfirmDialog,
// Callbacks:
CHROMEGTK_CALLBACK_0(TabModalConfirmDialogGtk, void, OnAccept);
CHROMEGTK_CALLBACK_0(TabModalConfirmDialogGtk, void, OnCancel);
+ CHROMEGTK_CALLBACK_0(TabModalConfirmDialogGtk, void, OnDestroy);
scoped_ptr<TabModalConfirmDialogDelegate> delegate_;