Index: chrome/browser/gtk/extension_install_prompt2_gtk.cc |
=================================================================== |
--- chrome/browser/gtk/extension_install_prompt2_gtk.cc (revision 71352) |
+++ chrome/browser/gtk/extension_install_prompt2_gtk.cc (working copy) |
@@ -1,192 +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/string_util.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/browser_list.h" |
-#include "chrome/browser/browser_window.h" |
-#include "chrome/browser/extensions/extension_install_ui.h" |
-#include "chrome/browser/gtk/browser_window_gtk.h" |
-#include "chrome/browser/gtk/gtk_util.h" |
-#include "chrome/common/extensions/extension.h" |
-#include "gfx/gtk_util.h" |
-#include "grit/generated_resources.h" |
-#include "skia/ext/image_operations.h" |
- |
-class Profile; |
- |
-namespace { |
- |
-const int kRightColumnMinWidth = 290; |
- |
-const int kImageSize = 69; |
- |
-// Padding on all sides of each permission in the permissions list. |
-const int kPermissionsPadding = 8; |
- |
-// Make a GtkLabel with |str| as its text, using the formatting in |format|. |
-GtkWidget* MakeMarkupLabel(const char* format, const std::string& str) { |
- GtkWidget* label = gtk_label_new(NULL); |
- char* markup = g_markup_printf_escaped(format, str.c_str()); |
- gtk_label_set_markup(GTK_LABEL(label), markup); |
- g_free(markup); |
- |
- // Left align it. |
- gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); |
- |
- return label; |
-} |
- |
-void OnDialogResponse(GtkDialog* dialog, int response_id, |
- ExtensionInstallUI::Delegate* delegate) { |
- if (response_id == GTK_RESPONSE_ACCEPT) { |
- delegate->InstallUIProceed(); |
- } else { |
- delegate->InstallUIAbort(); |
- } |
- |
- gtk_widget_destroy(GTK_WIDGET(dialog)); |
-} |
- |
-void ShowInstallPromptDialog2(GtkWindow* parent, SkBitmap* skia_icon, |
- const Extension* extension, |
- ExtensionInstallUI::Delegate *delegate, |
- const std::vector<string16>& permissions) { |
- // Build the dialog. |
- GtkWidget* dialog = gtk_dialog_new_with_buttons( |
- l10n_util::GetStringUTF8(IDS_EXTENSION_INSTALL_PROMPT_TITLE).c_str(), |
- parent, |
- GTK_DIALOG_MODAL, |
- NULL); |
- GtkWidget* close_button = gtk_dialog_add_button(GTK_DIALOG(dialog), |
- GTK_STOCK_CANCEL, GTK_RESPONSE_CLOSE); |
- gtk_dialog_add_button(GTK_DIALOG(dialog), |
- l10n_util::GetStringUTF8(IDS_EXTENSION_PROMPT_INSTALL_BUTTON).c_str(), |
- GTK_RESPONSE_ACCEPT); |
- gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE); |
- |
- // Create a two column layout. |
- GtkWidget* content_area = GTK_DIALOG(dialog)->vbox; |
- gtk_box_set_spacing(GTK_BOX(content_area), gtk_util::kContentAreaSpacing); |
- |
- GtkWidget* icon_hbox = gtk_hbox_new(FALSE, gtk_util::kContentAreaSpacing); |
- gtk_box_pack_start(GTK_BOX(content_area), icon_hbox, TRUE, TRUE, 0); |
- |
- // Resize the icon if necessary. |
- SkBitmap scaled_icon = *skia_icon; |
- if (scaled_icon.width() > kImageSize || scaled_icon.height() > kImageSize) { |
- scaled_icon = skia::ImageOperations::Resize(scaled_icon, |
- skia::ImageOperations::RESIZE_LANCZOS3, |
- kImageSize, kImageSize); |
- } |
- |
- // Put Icon in the left column. |
- GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&scaled_icon); |
- GtkWidget* icon = gtk_image_new_from_pixbuf(pixbuf); |
- g_object_unref(pixbuf); |
- gtk_box_pack_start(GTK_BOX(icon_hbox), icon, FALSE, FALSE, 0); |
- // Top justify the image. |
- gtk_misc_set_alignment(GTK_MISC(icon), 0.5, 0.0); |
- |
- // Create a new vbox for the right column. |
- GtkWidget* right_column_area = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
- gtk_box_pack_start(GTK_BOX(icon_hbox), right_column_area, TRUE, TRUE, 0); |
- |
- std::string heading_text = l10n_util::GetStringFUTF8( |
- IDS_EXTENSION_INSTALL_PROMPT_HEADING, UTF8ToUTF16(extension->name())); |
- GtkWidget* heading_label = MakeMarkupLabel("<span weight=\"bold\">%s</span>", |
- heading_text); |
- gtk_misc_set_alignment(GTK_MISC(heading_label), 0.0, 0.5); |
- bool show_permissions = !permissions.empty(); |
- // If we are not going to show the permissions, vertically center the title. |
- gtk_box_pack_start(GTK_BOX(right_column_area), heading_label, |
- !show_permissions, !show_permissions, 0); |
- |
- if (show_permissions) { |
- GtkWidget* warning_label = gtk_label_new(l10n_util::GetStringUTF8( |
- IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO).c_str()); |
- gtk_misc_set_alignment(GTK_MISC(warning_label), 0.0, 0.5); |
- gtk_util::SetLabelWidth(warning_label, kRightColumnMinWidth); |
- |
- gtk_box_pack_start(GTK_BOX(right_column_area), warning_label, |
- FALSE, FALSE, 0); |
- |
- GtkWidget* frame = gtk_frame_new(NULL); |
- gtk_box_pack_start(GTK_BOX(right_column_area), frame, FALSE, FALSE, 0); |
- |
- GtkWidget* text_view = gtk_text_view_new(); |
- gtk_container_add(GTK_CONTAINER(frame), text_view); |
- gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE); |
- gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_view), |
- kPermissionsPadding); |
- gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_view), |
- kPermissionsPadding); |
- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD); |
- GtkTextBuffer* buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); |
- GtkTextTagTable* tag_table = gtk_text_buffer_get_tag_table(buffer); |
- |
- GtkTextTag* padding_below_tag = gtk_text_tag_new(NULL); |
- g_object_set(G_OBJECT(padding_below_tag), "pixels-below-lines", |
- kPermissionsPadding, NULL); |
- g_object_set(G_OBJECT(padding_below_tag), "pixels-below-lines-set", |
- TRUE, NULL); |
- gtk_text_tag_table_add(tag_table, padding_below_tag); |
- g_object_unref(padding_below_tag); |
- GtkTextTag* padding_above_tag = gtk_text_tag_new(NULL); |
- g_object_set(G_OBJECT(padding_above_tag), "pixels-above-lines", |
- kPermissionsPadding, NULL); |
- g_object_set(G_OBJECT(padding_above_tag), "pixels-above-lines-set", |
- TRUE, NULL); |
- gtk_text_tag_table_add(tag_table, padding_above_tag); |
- g_object_unref(padding_above_tag); |
- |
- GtkTextIter end_iter; |
- gtk_text_buffer_get_end_iter(buffer, &end_iter); |
- for (std::vector<string16>::const_iterator iter = permissions.begin(); |
- iter != permissions.end(); ++iter) { |
- if (iter != permissions.begin()) |
- gtk_text_buffer_insert(buffer, &end_iter, "\n", -1); |
- gtk_text_buffer_insert_with_tags( |
- buffer, &end_iter, UTF16ToUTF8(*iter).c_str(), -1, |
- padding_below_tag, |
- iter == permissions.begin() ? padding_above_tag : NULL, |
- NULL); |
- } |
- } |
- |
- g_signal_connect(dialog, "response", G_CALLBACK(OnDialogResponse), delegate); |
- gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); |
- |
- gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE); |
- gtk_widget_show_all(dialog); |
- gtk_widget_grab_focus(close_button); |
-} |
- |
-} // namespace |
- |
-void ExtensionInstallUI::ShowExtensionInstallUIPrompt2Impl( |
- Profile* profile, |
- Delegate* delegate, |
- const Extension* extension, |
- SkBitmap* icon, |
- const std::vector<string16>& permissions) { |
- Browser* browser = BrowserList::GetLastActiveWithProfile(profile); |
- if (!browser) { |
- delegate->InstallUIAbort(); |
- return; |
- } |
- |
- BrowserWindowGtk* browser_window = static_cast<BrowserWindowGtk*>( |
- browser->window()); |
- if (!browser_window) { |
- delegate->InstallUIAbort(); |
- return; |
- } |
- |
- ShowInstallPromptDialog2(browser_window->window(), icon, extension, |
- delegate, permissions); |
-} |