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

Side by Side Diff: remoting/host/continue_window_gtk.cc

Issue 13461029: The continue window is owned by the desktop environment now. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/host/continue_window.h"
6
7 #include <gtk/gtk.h> 5 #include <gtk/gtk.h>
8 6
9 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
10 #include "base/logging.h" 8 #include "base/logging.h"
11 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "remoting/host/continue_window.h"
12 #include "remoting/host/ui_strings.h" 11 #include "remoting/host/ui_strings.h"
13 #include "ui/base/gtk/gtk_signal.h" 12 #include "ui/base/gtk/gtk_signal.h"
14 13
15 namespace remoting { 14 namespace remoting {
16 15
17 class ContinueWindowGtk : public remoting::ContinueWindow { 16 class ContinueWindowGtk : public ContinueWindow {
18 public: 17 public:
19 explicit ContinueWindowGtk(const UiStrings* ui_strings); 18 explicit ContinueWindowGtk(const UiStrings& ui_strings);
20 virtual ~ContinueWindowGtk(); 19 virtual ~ContinueWindowGtk();
21 20
22 virtual void Show(const ContinueSessionCallback& callback) OVERRIDE; 21 protected:
23 virtual void Hide() OVERRIDE; 22 // ContinueWindow overrides.
23 virtual void ShowUi() OVERRIDE;
24 virtual void HideUi() OVERRIDE;
24 25
25 private: 26 private:
27 void CreateWindow();
28
26 CHROMEGTK_CALLBACK_1(ContinueWindowGtk, void, OnResponse, int); 29 CHROMEGTK_CALLBACK_1(ContinueWindowGtk, void, OnResponse, int);
27 30
28 void CreateWindow(); 31 // Invoked when the user clicks on the Continue button to resume the session,
32 // or dismisses the window to disconnect the session.
33 base::Callback<void(bool)> continue_callback_;
Sergey Ulanov 2013/04/04 21:04:26 This is not used.
alexeypa (please no reviews) 2013/04/06 18:07:56 Done.
29 34
30 ContinueSessionCallback callback_;
31 GtkWidget* continue_window_; 35 GtkWidget* continue_window_;
32 36
33 // Points to the localized strings. 37 // Localized UI strings.
34 const UiStrings* ui_strings_; 38 UiStrings ui_strings_;
35 39
36 DISALLOW_COPY_AND_ASSIGN(ContinueWindowGtk); 40 DISALLOW_COPY_AND_ASSIGN(ContinueWindowGtk);
37 }; 41 };
38 42
39 ContinueWindowGtk::ContinueWindowGtk(const UiStrings* ui_strings) 43 ContinueWindowGtk::ContinueWindowGtk(const UiStrings& ui_strings)
40 : continue_window_(NULL), 44 : continue_window_(NULL),
41 ui_strings_(ui_strings) { 45 ui_strings_(ui_strings) {
42 } 46 }
43 47
44 ContinueWindowGtk::~ContinueWindowGtk() { 48 ContinueWindowGtk::~ContinueWindowGtk() {
49 if (continue_window_) {
50 gtk_widget_destroy(continue_window_);
51 continue_window_ = NULL;
52 }
53 }
54
55 void ContinueWindowGtk::ShowUi() {
56 DCHECK(CalledOnValidThread());
57 DCHECK(!continue_window_);
58
59 CreateWindow();
60 gtk_window_set_urgency_hint(GTK_WINDOW(continue_window_), TRUE);
61 gtk_window_present(GTK_WINDOW(continue_window_));
62 }
63
64 void ContinueWindowGtk::HideUi() {
65 DCHECK(CalledOnValidThread());
66
67 if (continue_window_) {
68 gtk_widget_destroy(continue_window_);
69 continue_window_ = NULL;
70 }
45 } 71 }
46 72
47 void ContinueWindowGtk::CreateWindow() { 73 void ContinueWindowGtk::CreateWindow() {
48 if (continue_window_) 74 DCHECK(CalledOnValidThread());
49 return; 75 DCHECK(!continue_window_);
50 76
51 continue_window_ = gtk_dialog_new_with_buttons( 77 continue_window_ = gtk_dialog_new_with_buttons(
52 UTF16ToUTF8(ui_strings_->product_name).c_str(), 78 UTF16ToUTF8(ui_strings_.product_name).c_str(),
53 NULL, 79 NULL,
54 static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR), 80 static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR),
55 UTF16ToUTF8(ui_strings_->stop_sharing_button_text).c_str(), 81 UTF16ToUTF8(ui_strings_.stop_sharing_button_text).c_str(),
56 GTK_RESPONSE_CANCEL, 82 GTK_RESPONSE_CANCEL,
57 UTF16ToUTF8(ui_strings_->continue_button_text).c_str(), 83 UTF16ToUTF8(ui_strings_.continue_button_text).c_str(),
58 GTK_RESPONSE_OK, 84 GTK_RESPONSE_OK,
59 NULL); 85 NULL);
60 86
61 gtk_dialog_set_default_response(GTK_DIALOG(continue_window_), 87 gtk_dialog_set_default_response(GTK_DIALOG(continue_window_),
62 GTK_RESPONSE_OK); 88 GTK_RESPONSE_OK);
63 gtk_window_set_resizable(GTK_WINDOW(continue_window_), FALSE); 89 gtk_window_set_resizable(GTK_WINDOW(continue_window_), FALSE);
64 90
65 // Set always-on-top, otherwise this window tends to be obscured by the 91 // Set always-on-top, otherwise this window tends to be obscured by the
66 // DisconnectWindow. 92 // DisconnectWindow.
67 gtk_window_set_keep_above(GTK_WINDOW(continue_window_), TRUE); 93 gtk_window_set_keep_above(GTK_WINDOW(continue_window_), TRUE);
68 94
69 g_signal_connect(continue_window_, "response", 95 g_signal_connect(continue_window_, "response",
70 G_CALLBACK(OnResponseThunk), this); 96 G_CALLBACK(OnResponseThunk), this);
71 97
72 GtkWidget* content_area = 98 GtkWidget* content_area =
73 gtk_dialog_get_content_area(GTK_DIALOG(continue_window_)); 99 gtk_dialog_get_content_area(GTK_DIALOG(continue_window_));
74 100
75 GtkWidget* text_label = 101 GtkWidget* text_label =
76 gtk_label_new(UTF16ToUTF8(ui_strings_->continue_prompt).c_str()); 102 gtk_label_new(UTF16ToUTF8(ui_strings_.continue_prompt).c_str());
77 gtk_label_set_line_wrap(GTK_LABEL(text_label), TRUE); 103 gtk_label_set_line_wrap(GTK_LABEL(text_label), TRUE);
78 // TODO(lambroslambrou): Fix magic numbers, as in disconnect_window_gtk.cc. 104 // TODO(lambroslambrou): Fix magic numbers, as in disconnect_window_gtk.cc.
79 gtk_misc_set_padding(GTK_MISC(text_label), 12, 12); 105 gtk_misc_set_padding(GTK_MISC(text_label), 12, 12);
80 gtk_container_add(GTK_CONTAINER(content_area), text_label); 106 gtk_container_add(GTK_CONTAINER(content_area), text_label);
81 107
82 gtk_widget_show_all(content_area); 108 gtk_widget_show_all(content_area);
83 } 109 }
84 110
85 void ContinueWindowGtk::Show(const ContinueSessionCallback& callback) { 111 void ContinueWindowGtk::OnResponse(GtkWidget* dialog, int response_id) {
86 callback_ = callback; 112 DCHECK(CalledOnValidThread());
87 CreateWindow(); 113
88 gtk_window_set_urgency_hint(GTK_WINDOW(continue_window_), TRUE); 114 if (response_id == GTK_RESPONSE_OK) {
89 gtk_window_present(GTK_WINDOW(continue_window_)); 115 ContinueSession();
116 } else {
117 DisconnectSession();
118 }
119
120 HideUi();
90 } 121 }
91 122
92 void ContinueWindowGtk::Hide() { 123 // static
93 if (continue_window_) { 124 scoped_ptr<HostWindow> HostWindow::CreateContinueWindow(
94 gtk_widget_destroy(continue_window_); 125 const UiStrings& ui_strings) {
95 continue_window_ = NULL; 126 return scoped_ptr<HostWindow>(new ContinueWindowGtk(ui_strings));
96 }
97 }
98
99 void ContinueWindowGtk::OnResponse(GtkWidget* dialog, int response_id) {
100 callback_.Run(response_id == GTK_RESPONSE_OK);
101 Hide();
102 }
103
104 scoped_ptr<ContinueWindow> ContinueWindow::Create(const UiStrings* ui_strings) {
105 return scoped_ptr<ContinueWindow>(new ContinueWindowGtk(ui_strings));
106 } 127 }
107 128
108 } // namespace remoting 129 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698