mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Fixed unnecessary redisplays of menus
This commit is contained in:
parent
3045995bbc
commit
d3dcbbd4f2
3
HISTORY
3
HISTORY
@ -10034,7 +10034,7 @@ Video Disk Recorder Revision History
|
||||
(suggested by Stefan Hofmann).
|
||||
- Added vdrrootdir and incdir to vdr.pc (thanks to Stefan Hofmann).
|
||||
|
||||
2025-02-12:
|
||||
2025-02-17:
|
||||
|
||||
- Removed all DEPRECATED_* code.
|
||||
- Fixed error checking in case the fps value can't be determined by the frame parser.
|
||||
@ -10081,3 +10081,4 @@ Video Disk Recorder Revision History
|
||||
- Adjusted PLUGINS.html to the new API version numbering introduced in version 2.7.2.
|
||||
- The function cPlugin::MainThreadHook() has been deprecated and may be removed in future
|
||||
versions. Use proper locking instead.
|
||||
- Fixed unnecessary redisplays of menus.
|
||||
|
9
menu.c
9
menu.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 5.20 2025/02/05 22:12:32 kls Exp $
|
||||
* $Id: menu.c 5.21 2025/02/17 10:49:10 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -4673,15 +4673,16 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
if (!HasSubMenu() && Update(HadSubMenu))
|
||||
Display();
|
||||
bool DoDisplay = Update();
|
||||
if (Key != kNone) {
|
||||
if (I18nCurrentLanguage() != osdLanguage) {
|
||||
Set();
|
||||
if (!HasSubMenu())
|
||||
Display();
|
||||
DoDisplay = true;
|
||||
}
|
||||
}
|
||||
if (DoDisplay)
|
||||
Display();
|
||||
return state;
|
||||
}
|
||||
|
||||
|
18
osdbase.c
18
osdbase.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osdbase.c 5.8 2025/02/13 13:58:07 kls Exp $
|
||||
* $Id: osdbase.c 5.9 2025/02/17 10:49:10 kls Exp $
|
||||
*/
|
||||
|
||||
#include "osdbase.h"
|
||||
@ -78,12 +78,16 @@ void cOsdObject::Show(void)
|
||||
cSkinDisplayMenu *cOsdMenu::displayMenu = NULL;
|
||||
int cOsdMenu::displayMenuCount = 0;
|
||||
int cOsdMenu::osdState = 0;
|
||||
cOsdMenu *cOsdMenu::topMenu = NULL;
|
||||
|
||||
cOsdMenu::cOsdMenu(const char *Title, int c0, int c1, int c2, int c3, int c4)
|
||||
{
|
||||
isMenu = true;
|
||||
digit = 0;
|
||||
hasHotkeys = false;
|
||||
if (!topMenu)
|
||||
topMenu = this;
|
||||
active = this == topMenu;
|
||||
displayMenuItems = 0;
|
||||
title = NULL;
|
||||
menuCategory = mcUnknown;
|
||||
@ -114,6 +118,8 @@ cOsdMenu::~cOsdMenu()
|
||||
cStatus::MsgOsdClear();
|
||||
if (!--displayMenuCount)
|
||||
DELETENULL(displayMenu);
|
||||
if (this == topMenu)
|
||||
topMenu = NULL;
|
||||
}
|
||||
|
||||
void cOsdMenu::SetMenuCategory(eMenuCategory MenuCategory)
|
||||
@ -126,6 +132,11 @@ void cOsdMenu::SetMenuSortMode(eMenuSortMode MenuSortMode)
|
||||
menuSortMode = MenuSortMode;
|
||||
}
|
||||
|
||||
void cOsdMenu::SetActive(bool Active)
|
||||
{
|
||||
active = Active;
|
||||
}
|
||||
|
||||
void cOsdMenu::SetDisplayMenu(void)
|
||||
{
|
||||
if (displayMenu) {
|
||||
@ -240,6 +251,8 @@ void cOsdMenu::Display(void)
|
||||
subMenu->Display();
|
||||
return;
|
||||
}
|
||||
if (!active)
|
||||
return;
|
||||
if (cOsdProvider::OsdSizeChanged(osdState))
|
||||
SetDisplayMenu();
|
||||
displayMenu->SetMessage(mtStatus, NULL);
|
||||
@ -533,8 +546,10 @@ eOSState cOsdMenu::HotKey(eKeys Key)
|
||||
|
||||
eOSState cOsdMenu::AddSubMenu(cOsdMenu *SubMenu)
|
||||
{
|
||||
SetActive(false);
|
||||
delete subMenu;
|
||||
subMenu = SubMenu;
|
||||
subMenu->SetActive(true);
|
||||
subMenu->Display();
|
||||
return osContinue; // convenience return value
|
||||
}
|
||||
@ -543,6 +558,7 @@ eOSState cOsdMenu::CloseSubMenu(bool ReDisplay)
|
||||
{
|
||||
delete subMenu;
|
||||
subMenu = NULL;
|
||||
SetActive(true);
|
||||
if (ReDisplay) {
|
||||
RefreshCurrent();
|
||||
Display();
|
||||
|
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: osdbase.h 5.1 2025/02/05 22:12:32 kls Exp $
|
||||
* $Id: osdbase.h 5.2 2025/02/17 10:49:10 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __OSDBASE_H
|
||||
@ -87,6 +87,7 @@ private:
|
||||
static cSkinDisplayMenu *displayMenu;
|
||||
static int displayMenuCount;
|
||||
static int osdState;
|
||||
static cOsdMenu *topMenu;
|
||||
int displayMenuItems;
|
||||
char *title;
|
||||
int cols[cSkinDisplayMenu::MaxTabs];
|
||||
@ -102,6 +103,8 @@ private:
|
||||
char *status;
|
||||
int digit;
|
||||
bool hasHotkeys;
|
||||
bool active;
|
||||
void SetActive(bool Active);
|
||||
void DisplayHelp(bool Force = false);
|
||||
void DisplayNoStatus(void);
|
||||
protected:
|
||||
|
Loading…
x
Reference in New Issue
Block a user