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

Side by Side Diff: chrome/browser/gtk/extension_install_prompt_gtk.cc

Issue 174462: Linux Extensions Install Prompt (Closed)
Patch Set: test Created 11 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
« no previous file with comments | « chrome/browser/extensions/extension_install_ui.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2009 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 <gtk/gtk.h>
6
7 #include "app/l10n_util.h"
8 #include "base/gfx/gtk_util.h"
9 #include "base/rand_util.h"
10 #include "base/string_util.h"
11 #include "chrome/browser/browser_list.h"
12 #include "chrome/browser/browser_window.h"
13 #include "chrome/browser/gtk/browser_window_gtk.h"
14 #include "chrome/browser/extensions/extension_install_ui.h"
15 #include "chrome/common/gtk_util.h"
16 #include "chrome/common/extensions/extension.h"
17 #include "grit/generated_resources.h"
18
19 class Profile;
20
21 namespace {
22
23 const int kRightColumnWidth = 290;
24
25 // Left or right margin.
26 const int kPanelHorizMargin = 13;
27
28 GtkWidget* MakeMarkupLabel(const char* format, const std::string& str) {
29 GtkWidget* label = gtk_label_new(NULL);
30 char* markup = g_markup_printf_escaped(format, str.c_str());
31 gtk_label_set_markup(GTK_LABEL(label), markup);
32 g_free(markup);
33
34 // Left align it.
35 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
36
37 return label;
38 }
39
40 void OnDialogResponse(GtkDialog* dialog, int response_id,
41 ExtensionInstallUI::Delegate* delegate) {
42 if (response_id == GTK_RESPONSE_ACCEPT) {
43 delegate->ContinueInstall();
44 } else {
45 delegate->AbortInstall();
46 }
47
48 gtk_widget_destroy(GTK_WIDGET(dialog));
49 }
50
51 void ShowInstallPromptDialog(GtkWindow* parent, SkBitmap* skia_icon,
52 Extension *extension,
53 ExtensionInstallUI::Delegate *delegate) {
54 // Build the dialog.
55 GtkWidget* dialog = gtk_dialog_new_with_buttons(
56 l10n_util::GetStringUTF8(IDS_EXTENSION_PROMPT_TITLE).c_str(),
57 parent,
58 GTK_DIALOG_MODAL,
59 GTK_STOCK_CANCEL,
60 GTK_RESPONSE_CLOSE,
61 "Install",
62 GTK_RESPONSE_ACCEPT,
63 NULL);
64 gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
65
66 GtkWidget* content_area = GTK_DIALOG(dialog)->vbox;
67 gtk_box_set_spacing(GTK_BOX(content_area), gtk_util::kContentAreaSpacing);
68
69 GtkWidget* right_column_area;
70 if (skia_icon) {
71 // Create a two column layout.
72 GtkWidget* icon_hbox = gtk_hbox_new(FALSE, gtk_util::kContentAreaSpacing);
73 gtk_box_pack_start(GTK_BOX(content_area), icon_hbox, TRUE, TRUE, 0);
74
75 // Put Icon in the left column.
76 GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(skia_icon);
77 GtkWidget* icon = gtk_image_new_from_pixbuf(pixbuf);
78 gtk_box_pack_start(GTK_BOX(icon_hbox), icon, TRUE, TRUE, 0);
79
80 // Create a new vbox for the right column.
81 right_column_area = gtk_vbox_new(FALSE, 0);
82 gtk_box_pack_start(GTK_BOX(icon_hbox), right_column_area, TRUE, TRUE, 0);
83 } else {
84 right_column_area = content_area;
85 }
86
87 // Prompt.
88 std::string prompt_text = WideToUTF8(l10n_util::GetStringF(
89 IDS_EXTENSION_PROMPT_HEADING, UTF8ToWide(extension->name())));
90 GtkWidget* prompt_label = MakeMarkupLabel("<span weight=\"bold\">%s</span>",
91 prompt_text);
92 gtk_misc_set_alignment(GTK_MISC(prompt_label), 0.0, 0.5);
93 gtk_label_set_selectable(GTK_LABEL(prompt_label), TRUE);
94 gtk_box_pack_start(GTK_BOX(right_column_area), prompt_label, TRUE, TRUE, 0);
95
96 // Pick a random warning.
97 std::string warnings[] = {
98 l10n_util::GetStringUTF8(IDS_EXTENSION_PROMPT_WARNING_1),
99 l10n_util::GetStringUTF8(IDS_EXTENSION_PROMPT_WARNING_2),
100 l10n_util::GetStringUTF8(IDS_EXTENSION_PROMPT_WARNING_3)
101 };
102 std::string warning_text = warnings[
103 base::RandInt(0, arraysize(warnings) - 1)];
104 GtkWidget* warning_label = gtk_label_new(warning_text.c_str());
105 gtk_label_set_line_wrap(GTK_LABEL(warning_label), TRUE);
106 gtk_widget_set_size_request(warning_label, kRightColumnWidth, -1);
107 gtk_misc_set_alignment(GTK_MISC(warning_label), 0.0, 0.5);
108 gtk_label_set_selectable(GTK_LABEL(warning_label), TRUE);
109 gtk_box_pack_start(GTK_BOX(right_column_area), warning_label, TRUE, TRUE, 0);
110
111 // Severe label
112 std::string severe_text = l10n_util::GetStringUTF8(
113 IDS_EXTENSION_PROMPT_WARNING_SEVERE);
114 GtkWidget* severe_label = MakeMarkupLabel("<span weight=\"bold\">%s</span>",
115 severe_text);
116 GdkColor red = GDK_COLOR_RGB(0xff, 0x00, 0x00);
117 gtk_widget_modify_fg(severe_label, GTK_STATE_NORMAL, &red);
118 gtk_misc_set_alignment(GTK_MISC(severe_label), 0.0, 0.5);
119 gtk_label_set_selectable(GTK_LABEL(severe_label), TRUE);
120 gtk_box_pack_start(GTK_BOX(right_column_area), severe_label, TRUE, TRUE, 0);
121
122 g_signal_connect(dialog, "response", G_CALLBACK(OnDialogResponse), delegate);
123 gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
124 gtk_widget_show_all(dialog);
125 }
126
127 } // namespace
128
129 void ExtensionInstallUI::ShowExtensionInstallPrompt(Profile* profile,
130 Delegate* delegate,
131 Extension* extension,
132 SkBitmap* icon) {
133 Browser* browser = BrowserList::GetLastActiveWithProfile(profile);
134 if (!browser) {
135 delegate->ContinueInstall();
136 return;
137 }
138
139 BrowserWindowGtk* browser_window = static_cast<BrowserWindowGtk*>(
140 browser->window());
141 if (!browser_window) {
142 delegate->AbortInstall();
143 return;
144 }
145
146 ShowInstallPromptDialog(browser_window->window(), icon, extension, delegate);
147 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_install_ui.cc ('k') | chrome/chrome.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698