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/update_recommended_dialog.h"
6
7#include <gtk/gtk.h>
8
9#include "chrome/browser/browser_process.h"
10#include "chrome/browser/prefs/pref_service.h"
11#include "chrome/browser/ui/browser_list.h"
12#include "chrome/browser/ui/gtk/gtk_util.h"
13#include "chrome/common/pref_names.h"
14#include "grit/chromium_strings.h"
15#include "grit/generated_resources.h"
16#include "ui/base/l10n/l10n_util.h"
17
18static const int kMessageWidth = 400;
19
20// static
21void UpdateRecommendedDialog::Show(GtkWindow* parent) {
22  new UpdateRecommendedDialog(parent);
23}
24
25UpdateRecommendedDialog::UpdateRecommendedDialog(GtkWindow* parent) {
26  dialog_ = gtk_dialog_new_with_buttons(
27      l10n_util::GetStringUTF8(IDS_PRODUCT_NAME).c_str(),
28      parent,
29      static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR),
30      l10n_util::GetStringUTF8(IDS_NOT_NOW).c_str(),
31      GTK_RESPONSE_REJECT,
32      l10n_util::GetStringUTF8(IDS_RELAUNCH_AND_UPDATE).c_str(),
33      GTK_RESPONSE_ACCEPT,
34      NULL);
35
36  g_signal_connect(dialog_, "response", G_CALLBACK(OnResponseThunk), this);
37
38  // Add the message text.
39  std::string text(
40      l10n_util::GetStringFUTF8(IDS_UPDATE_RECOMMENDED,
41                                l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
42  GtkWidget* label = gtk_label_new(text.c_str());
43  gtk_util::SetLabelWidth(label, kMessageWidth);
44  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), label,
45                     FALSE, FALSE, 0);
46
47  gtk_window_set_resizable(GTK_WINDOW(dialog_), FALSE);
48
49  gtk_widget_show_all(dialog_);
50}
51
52UpdateRecommendedDialog::~UpdateRecommendedDialog() {
53}
54
55void UpdateRecommendedDialog::OnResponse(GtkWidget* dialog, int response_id) {
56  gtk_widget_destroy(dialog_);
57
58  if (response_id == GTK_RESPONSE_ACCEPT) {
59    // Set the flag to restore the last session on shutdown.
60    PrefService* pref_service = g_browser_process->local_state();
61    pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true);
62
63    BrowserList::CloseAllBrowsersAndExit();
64  }
65
66  delete this;
67}
68