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

Side by Side Diff: chrome/browser/ui/gtk/web_intent_picker_gtk.cc

Issue 7778032: Revert 98888 - Web Intent Picker UI (implemented as a constrained dialog, linux only) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/gtk/web_intent_picker_gtk.h"
6
7 #include "chrome/browser/favicon/favicon_service.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/ui/gtk/custom_button.h"
10 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
11 #include "chrome/browser/ui/gtk/gtk_util.h"
12 #include "chrome/browser/ui/intents/web_intent_picker_controller.h"
13 #include "chrome/browser/ui/intents/web_intent_picker_delegate.h"
14 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
15 #include "content/browser/tab_contents/tab_contents.h"
16 #include "content/common/content_notification_types.h"
17 #include "googleurl/src/gurl.h"
18 #include "grit/generated_resources.h"
19 #include "grit/ui_resources.h"
20 #include "ui/base/l10n/l10n_util.h"
21 #include "ui/base/resource/resource_bundle.h"
22 #include "ui/gfx/gtk_util.h"
23 #include "ui/gfx/image/image.h"
24
25 namespace {
26
27 GtkThemeService *GetThemeService(TabContents* tab_contents) {
28 Profile* profile = Profile::FromBrowserContext(
29 tab_contents->browser_context());
30 return GtkThemeService::GetFrom(profile);
31 }
32
33 } // namespace
34
35 // static
36 WebIntentPicker* WebIntentPicker::Create(TabContents* tab_contents,
37 WebIntentPickerDelegate* delegate) {
38 return new WebIntentPickerGtk(tab_contents, delegate);
39 }
40
41 WebIntentPickerGtk::WebIntentPickerGtk(TabContents* tab_contents,
42 WebIntentPickerDelegate* delegate)
43 : tab_contents_(tab_contents),
44 delegate_(delegate),
45 window_(NULL) {
46 DCHECK(delegate_ != NULL);
47 root_.Own(gtk_vbox_new(FALSE, gtk_util::kContentAreaBorder));
48 GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
49 GtkWidget* label = gtk_label_new(
50 l10n_util::GetStringUTF8(IDS_CHOOSE_INTENT_HANDLER_MESSAGE).c_str());
51 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
52
53 close_button_.reset(
54 CustomDrawButton::CloseButton(GetThemeService(tab_contents_)));
55 g_signal_connect(close_button_->widget(),
56 "clicked",
57 G_CALLBACK(OnCloseButtonClickThunk),
58 this);
59 gtk_widget_set_can_focus(close_button_->widget(), FALSE);
60 gtk_box_pack_end(GTK_BOX(hbox), close_button_->widget(), FALSE, FALSE, 0);
61
62 gtk_box_pack_start(GTK_BOX(root_.get()), hbox, FALSE, FALSE, 0);
63
64 button_hbox_ = gtk_hbox_new(FALSE, gtk_util::kContentAreaBorder);
65 gtk_box_pack_start(GTK_BOX(root_.get()), button_hbox_, TRUE, TRUE, 0);
66 }
67
68 WebIntentPickerGtk::~WebIntentPickerGtk() {
69 DCHECK(window_ == NULL) << "Should have closed window before destroying.";
70 }
71
72 void WebIntentPickerGtk::SetServiceURLs(const std::vector<GURL>& urls) {
73 for (size_t i = 0; i < urls.size(); ++i) {
74 GtkWidget* button = gtk_button_new();
75 gtk_widget_set_tooltip_text(button, urls[i].spec().c_str());
76 gtk_box_pack_start(GTK_BOX(button_hbox_), button, FALSE, FALSE, 0);
77 g_signal_connect(button,
78 "clicked",
79 G_CALLBACK(OnServiceButtonClickThunk),
80 this);
81 }
82
83 gtk_widget_show_all(button_hbox_);
84 }
85
86 void WebIntentPickerGtk::SetServiceIcon(size_t index, const SkBitmap& icon) {
87 if (icon.empty())
88 return;
89
90 GList* button_list = gtk_container_get_children(GTK_CONTAINER(button_hbox_));
91 GtkButton* button = GTK_BUTTON(g_list_nth_data(button_list, index));
92 DCHECK(button != NULL) << "Invalid index.";
93
94 GdkPixbuf* icon_pixbuf = gfx::GdkPixbufFromSkBitmap(&icon);
95 gtk_button_set_image(button, gtk_image_new_from_pixbuf(icon_pixbuf));
96 g_object_unref(icon_pixbuf);
97 }
98
99 void WebIntentPickerGtk::SetDefaultServiceIcon(size_t index) {
100 GList* button_list = gtk_container_get_children(GTK_CONTAINER(button_hbox_));
101 GtkButton* button = GTK_BUTTON(g_list_nth_data(button_list, index));
102 DCHECK(button != NULL) << "Invalid index.";
103
104 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
105 GdkPixbuf* icon_pixbuf = rb.GetNativeImageNamed(IDR_DEFAULT_FAVICON);
106 gtk_button_set_image(button, gtk_image_new_from_pixbuf(icon_pixbuf));
107 }
108
109 void WebIntentPickerGtk::Show() {
110 DCHECK(window_ == NULL) << "Show already called.";
111 window_ = new ConstrainedWindowGtk(tab_contents_, this);
112 }
113
114 void WebIntentPickerGtk::Close() {
115 DCHECK(window_ != NULL) << "Show not called.";
116 window_->CloseConstrainedWindow();
117 window_ = NULL;
118 }
119
120 GtkWidget* WebIntentPickerGtk::GetWidgetRoot() {
121 return root_.get();
122 }
123
124 GtkWidget* WebIntentPickerGtk::GetFocusWidget() {
125 return root_.get();
126 }
127
128 void WebIntentPickerGtk::DeleteDelegate() {
129 MessageLoop::current()->DeleteSoon(FROM_HERE, this);
130 }
131
132 void WebIntentPickerGtk::OnCloseButtonClick(GtkWidget* button) {
133 delegate_->OnCancelled();
134 }
135
136 void WebIntentPickerGtk::OnServiceButtonClick(GtkWidget* button) {
137 GList* button_list = gtk_container_get_children(GTK_CONTAINER(button_hbox_));
138 gint index = g_list_index(button_list, button);
139 DCHECK(index != -1);
140
141 delegate_->OnServiceChosen(static_cast<size_t>(index));
142 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/web_intent_picker_gtk.h ('k') | chrome/browser/ui/intents/web_intent_constrained_dialog_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698