@@ -122,19 +122,9 @@ void WAbstractToggleButton::undoSetUnChecked()
122122 undoSetChecked ();
123123}
124124
125- void WAbstractToggleButton ::updateDom (DomElement & element , bool all )
125+ void WAbstractToggleButton ::updateDomElements (DomElement & element ,
126+ DomElement & input , bool all )
126127{
127- if (stateChanged_ || all ) {
128- element .setProperty (Wt ::PropertyChecked ,
129- state_ == Checked ? "true" : "false" );
130-
131- if (!useImageWorkaround ())
132- element .setProperty (Wt ::PropertyIndeterminate ,
133- state_ == PartiallyChecked ? "true" : "false" );
134-
135- stateChanged_ = false;
136- }
137-
138128 const WEnvironment & env = WApplication ::instance ()-> environment ();
139129
140130 EventSignal < > * check = voidEventSignal (CHECKED_SIGNAL , false);
@@ -149,10 +139,31 @@ void WAbstractToggleButton::updateDom(DomElement& element, bool all)
149139 || (check && check -> needUpdate ())
150140 || (uncheck && uncheck -> needUpdate ()));
151141
152- WFormWidget ::updateDom (element , all );
142+ updateDom (input , all );
143+
144+ /*
145+ * Copy all properties to the exterior element, as they relate to style,
146+ * etc... We ignore here attributes, see WWebWidget: there seems not to
147+ * be attributes that sensibly need to be moved.
148+ */
149+ if (& element != & input ) {
150+ element .setProperties (input .properties ());
151+ input .clearProperties ();
152+ }
153+
154+ if (stateChanged_ || all ) {
155+ input .setProperty (Wt ::PropertyChecked ,
156+ state_ == Checked ? "true" : "false" );
157+
158+ if (!useImageWorkaround ())
159+ input .setProperty (Wt ::PropertyIndeterminate ,
160+ state_ == PartiallyChecked ? "true" : "false" );
161+
162+ stateChanged_ = false;
163+ }
153164
154165 if (needUpdateClickedSignal || all ) {
155- std ::string dom = WT_CLASS ".getElement('" + element .id () + "')" ;
166+ std ::string dom = WT_CLASS ".getElement('" + input .id () + "')" ;
156167 std ::vector < DomElement ::EventAction > actions ;
157168
158169 if (check ) {
@@ -196,7 +207,7 @@ void WAbstractToggleButton::updateDom(DomElement& element, bool all)
196207 }
197208
198209 if (!(all && actions .empty ()))
199- element .setEvent ("click" , actions );
210+ input .setEvent ("click" , actions );
200211 }
201212}
202213
@@ -264,7 +275,7 @@ DomElement *WAbstractToggleButton::createDomElement(WApplication *app)
264275 }
265276 }
266277
267- updateDom ( * input , true);
278+ updateDomElements ( * result , * input , true);
268279
269280 if (result != input ) {
270281 result -> addChild (input );
@@ -281,19 +292,19 @@ DomElement *WAbstractToggleButton::createDomElement(WApplication *app)
281292void WAbstractToggleButton ::getDomChanges (std ::vector < DomElement * > & result ,
282293 WApplication * app )
283294{
284- DomElementType type = domElementType ();
285-
286- if (type == DomElement_SPAN ) {
295+ DomElement * element = DomElement ::getForUpdate (this , domElementType ());
296+ if (element -> type () == DomElement_SPAN ) {
287297 DomElement * input
288298 = DomElement ::getForUpdate ("in" + id (), DomElement_INPUT );
289299
300+ updateDomElements (* element , * input , false);
301+
290302 if (useImageWorkaround ()) {
291303 EventSignal < > * imgClick = voidEventSignal (UNDETERMINATE_CLICK_SIGNAL ,
292304 true);
293305
294306 if (stateChanged_ || imgClick -> needUpdate ()) {
295- DomElement * img
296- = DomElement ::getForUpdate ("im" + id (), DomElement_IMG );
307+ DomElement * img = DomElement ::getForUpdate ("im" + id (), DomElement_IMG );
297308
298309 if (stateChanged_ ) {
299310 img -> setProperty (Wt ::PropertyStyleDisplay ,
@@ -311,12 +322,11 @@ void WAbstractToggleButton::getDomChanges(std::vector<DomElement *>& result,
311322 }
312323 }
313324
314- updateDom ( * input , false );
325+ result . push_back ( element );
315326 result .push_back (input );
316327 } else {
317- DomElement * e = DomElement ::getForUpdate (this , domElementType ());
318- updateDom (* e , false);
319- result .push_back (e );
328+ updateDomElements (* element , * element , false);
329+ result .push_back (element );
320330 }
321331}
322332
0 commit comments