5 comments
on commit c275bf3

I think a little more proper fix is to put the parentheses around the && part only (i.e. g_windowManager.GetActiveWindow() == WINDOW_DIALOG_VIDEO_OSD && (action.GetID() == ACTION_NEXT_ITEM ) instead of the rest of the || parts; because that's actually how the logic is evaluated. The two values on both sides of the && are evaluated first, then they're treated as a single value which will be OR'ed with the rest of the expression.

@jowadmax that would be wrong. The old logic was player->OnAction only triggered by fullscreenvideo (unconditional), or by osd (with just those four actions). @t-nelson is correct, and with or without the parentheses (since logical "and" takes precedence in expression evaluation).

@Voyager1 this don't fix the issue with random channel switches on channel osd (verified in 13 alpha 5). After dialog initialization the control does not get the focus, because of an issue within the control state handling in the dialog class fixed in #2912. If the channel osd control get's the focus it works.

In that case the problem was probably related to the fact that the windows (osd or fullscreen) still are getting a chance of handling the action. My first guess was that it was due to the unconditional delegation to player, now it looks as if it's because the windows in casu still go through their remaining OnAction code.
That being said, this has exposed another problem, which you obviously fixed.