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

Side by Side Diff: views/controls/button/native_button_gtk.cc

Issue 201079: Lands http://codereview.chromium.org/194014 for Oshima:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: 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 | Annotate | Revision Log
« no previous file with comments | « views/controls/button/native_button_gtk.h ('k') | views/controls/message_box_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this
2 // source code is governed by a BSD-style license that can be found in the 2 // source code is governed by a BSD-style license that can be found in the
3 // LICENSE file. 3 // LICENSE file.
4 4
5 #include <gtk/gtk.h> 5 #include <gtk/gtk.h>
6 6
7 #include "views/controls/button/native_button_gtk.h" 7 #include "views/controls/button/native_button_gtk.h"
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 50
51 void NativeButtonGtk::UpdateEnabled() { 51 void NativeButtonGtk::UpdateEnabled() {
52 if (!native_view()) 52 if (!native_view())
53 return; 53 return;
54 SetEnabled(native_button_->IsEnabled()); 54 SetEnabled(native_button_->IsEnabled());
55 } 55 }
56 56
57 void NativeButtonGtk::UpdateDefault() { 57 void NativeButtonGtk::UpdateDefault() {
58 if (!native_view()) 58 if (!native_view())
59 return; 59 return;
60 if (!IsCheckbox()) 60 if (IsCheckbox())
61 UpdateChecked();
62 else
61 NOTIMPLEMENTED(); 63 NOTIMPLEMENTED();
62 } 64 }
63 65
64 View* NativeButtonGtk::GetView() { 66 View* NativeButtonGtk::GetView() {
65 return this; 67 return this;
66 } 68 }
67 69
68 void NativeButtonGtk::SetFocus() { 70 void NativeButtonGtk::SetFocus() {
69 // Focus the associated widget. 71 // Focus the associated widget.
70 Focus(); 72 Focus();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 110
109 // static 111 // static
110 void NativeButtonGtk::CallClicked(GtkButton* widget, NativeButtonGtk* button) { 112 void NativeButtonGtk::CallClicked(GtkButton* widget, NativeButtonGtk* button) {
111 button->OnClicked(); 113 button->OnClicked();
112 } 114 }
113 115
114 void NativeButtonGtk::OnClicked() { 116 void NativeButtonGtk::OnClicked() {
115 native_button_->ButtonPressed(); 117 native_button_->ButtonPressed();
116 } 118 }
117 119
120 ////////////////////////////////////////////////////////////////////////////////
121 // NativeCheckboxGtk
118 NativeCheckboxGtk::NativeCheckboxGtk(Checkbox* checkbox) 122 NativeCheckboxGtk::NativeCheckboxGtk(Checkbox* checkbox)
119 : NativeButtonGtk(checkbox) { 123 : NativeButtonGtk(checkbox),
124 checkbox_(checkbox),
125 deliver_click_event_(true) {
120 } 126 }
121 127
122 void NativeCheckboxGtk::CreateNativeControl() { 128 void NativeCheckboxGtk::CreateNativeControl() {
123 GtkWidget* widget = gtk_check_button_new(); 129 GtkWidget* widget = gtk_check_button_new();
130 g_signal_connect(G_OBJECT(widget), "clicked",
131 G_CALLBACK(CallClicked), this);
124 NativeControlCreated(widget); 132 NativeControlCreated(widget);
125 } 133 }
126 134
135 void NativeCheckboxGtk::OnClicked() {
136 // ignore event if the event is generated by
137 // gtk_toggle_button_set_active below.
138 if (deliver_click_event_) {
139 checkbox_->SetChecked(!checkbox_->checked());
140 NativeButtonGtk::OnClicked();
141 }
142 }
143
144 void NativeCheckboxGtk::UpdateChecked() {
145 if (!native_view())
146 return;
147 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(native_view()))
148 != checkbox_->checked()) {
149 // gtk_toggle_button_set_active emites "clicked" signal, which
150 // invokes OnClicked method above. deliver_click_event_ flag is used
151 // to prevent such signal to invoke OnClicked callback.
152 deliver_click_event_ = false;
153 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(native_view()),
154 checkbox_->checked());
155 deliver_click_event_ = true;
156 }
157 }
158
159 // static
160 void NativeCheckboxGtk::CallClicked(GtkButton* widget,
161 NativeCheckboxGtk* button) {
162 button->OnClicked();
163 }
164
165 ////////////////////////////////////////////////////////////////////////////////
166 // NativeButtonWrapper
167
127 // static 168 // static
128 int NativeButtonWrapper::GetFixedWidth() { 169 int NativeButtonWrapper::GetFixedWidth() {
129 // TODO(brettw) implement this properly. 170 // TODO(brettw) implement this properly.
130 return 10; 171 return 10;
131 } 172 }
132 173
133 // static 174 // static
134 NativeButtonWrapper* NativeButtonWrapper::CreateNativeButtonWrapper( 175 NativeButtonWrapper* NativeButtonWrapper::CreateNativeButtonWrapper(
135 NativeButton* native_button) { 176 NativeButton* native_button) {
136 return new NativeButtonGtk(native_button); 177 return new NativeButtonGtk(native_button);
137 } 178 }
138 179
139 // static 180 // static
140 NativeButtonWrapper* NativeButtonWrapper::CreateCheckboxWrapper( 181 NativeButtonWrapper* NativeButtonWrapper::CreateCheckboxWrapper(
141 Checkbox* checkbox) { 182 Checkbox* checkbox) {
142 return new NativeCheckboxGtk(checkbox); 183 return new NativeCheckboxGtk(checkbox);
143 } 184 }
144 185
145 // static 186 // static
146 NativeButtonWrapper* NativeButtonWrapper::CreateRadioButtonWrapper( 187 NativeButtonWrapper* NativeButtonWrapper::CreateRadioButtonWrapper(
147 RadioButton* radio_button) { 188 RadioButton* radio_button) {
148 NOTIMPLEMENTED(); 189 NOTIMPLEMENTED();
149 return NULL; 190 return NULL;
150 } 191 }
151 192
152 } // namespace views 193 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/button/native_button_gtk.h ('k') | views/controls/message_box_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698