AnsweredAssumed Answered

[Bug] Blimp 3.9 SP2: All items on all OSDListBoxes are disabled

Question asked by JonF-MDS on Jun 15, 2016
Latest reply on Jun 17, 2016 by JeyasudhaMuthuPerumal

I am having trouble with Blimp 3.9 SP2 and listboxes.

 

The code that handles disabled listbox items has changed, and now all of the listbox items are disabled by any call to set whether an item is disabled or not.

 

The new function OsdListbox_setDisableItemsValue(OsdListbox* ref, UINT8 index, BOOL disabledItems) takes 3 parameters but the third parameter, "disabledItems" is never used in the function. The only code it executes is "BaseDriver_setBit(ref->disabledItems, index, TRUE);". It can never pass a FALSE value since it's ignoring the value passed from user code. Calling the function effectively disables the listbox item with no way to ever return it to enabled state.

 

Incidentally, the new support for hidden items has the same error. It's in the same file between the functions quoted below, but the problem I encountered is with disabled items, as we do not use hidden items at the moment.

 

I got around this bug by patching the code to pass the value of disabledItems instead of TRUE.

 

This is a partial diff of the osd_osdListbox.c file from 3.8 SP1 to 3.9 SP2 for the relevant sections:

 

BOOL OsdListbox_getDisabledItems(OsdListbox* ref, UINT8 index)

{

-  return  ref->disabledItems[index];

+  BOOL itemStatus;

+  itemStatus = OsdListbox_getDisableItemsValue(ref,index);

+  return  itemStatus;

}

 

void OsdListbox_setDisabledItems(OsdListbox* ref, UINT8 index, BOOL disabledItems)

{

-    ref->disabledItems[index] = disabledItems;

+    OsdListbox_setDisableItemsValue(ref,index,disabledItems);

+    /*ref->disabledItems[index] = disabledItems;*/

     if(ref->_base.DrawingEnable == TRUE)

         OsdListbox_Draw(ref);

}

 

... (Stuff about Hidden items snipped)

 

+BOOL OsdListbox_getDisableItemsValue(OsdListbox* ref, UINT8 index)

+{

+    BOOL status;

+    status = BaseDriver_getBit(ref->disabledItems, index);

+    return status;

+}

+

+void OsdListbox_setDisableItemsValue(OsdListbox* ref, UINT8 index, BOOL disabledItems)

+{

+    BaseDriver_setBit(ref->disabledItems, index, TRUE);

+}

 

(Emphasis on TRUE is mine.)

 

Outcomes