| Index: views/controls/button/native_button_gtk.cc
|
| ===================================================================
|
| --- views/controls/button/native_button_gtk.cc (revision 25662)
|
| +++ views/controls/button/native_button_gtk.cc (working copy)
|
| @@ -57,7 +57,9 @@
|
| void NativeButtonGtk::UpdateDefault() {
|
| if (!native_view())
|
| return;
|
| - if (!IsCheckbox())
|
| + if (IsCheckbox())
|
| + UpdateChecked();
|
| + else
|
| NOTIMPLEMENTED();
|
| }
|
|
|
| @@ -115,16 +117,55 @@
|
| native_button_->ButtonPressed();
|
| }
|
|
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// NativeCheckboxGtk
|
| NativeCheckboxGtk::NativeCheckboxGtk(Checkbox* checkbox)
|
| - : NativeButtonGtk(checkbox) {
|
| + : NativeButtonGtk(checkbox),
|
| + checkbox_(checkbox),
|
| + deliver_click_event_(true) {
|
| }
|
|
|
| void NativeCheckboxGtk::CreateNativeControl() {
|
| GtkWidget* widget = gtk_check_button_new();
|
| + g_signal_connect(G_OBJECT(widget), "clicked",
|
| + G_CALLBACK(CallClicked), this);
|
| NativeControlCreated(widget);
|
| }
|
|
|
| +void NativeCheckboxGtk::OnClicked() {
|
| + // ignore event if the event is generated by
|
| + // gtk_toggle_button_set_active below.
|
| + if (deliver_click_event_) {
|
| + checkbox_->SetChecked(!checkbox_->checked());
|
| + NativeButtonGtk::OnClicked();
|
| + }
|
| +}
|
| +
|
| +void NativeCheckboxGtk::UpdateChecked() {
|
| + if (!native_view())
|
| + return;
|
| + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(native_view()))
|
| + != checkbox_->checked()) {
|
| + // gtk_toggle_button_set_active emites "clicked" signal, which
|
| + // invokes OnClicked method above. deliver_click_event_ flag is used
|
| + // to prevent such signal to invoke OnClicked callback.
|
| + deliver_click_event_ = false;
|
| + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(native_view()),
|
| + checkbox_->checked());
|
| + deliver_click_event_ = true;
|
| + }
|
| +}
|
| +
|
| // static
|
| +void NativeCheckboxGtk::CallClicked(GtkButton* widget,
|
| + NativeCheckboxGtk* button) {
|
| + button->OnClicked();
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// NativeButtonWrapper
|
| +
|
| +// static
|
| int NativeButtonWrapper::GetFixedWidth() {
|
| // TODO(brettw) implement this properly.
|
| return 10;
|
|
|