summaryrefslogtreecommitdiffstats
path: root/video/out/win32/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/win32/menu.c')
-rw-r--r--video/out/win32/menu.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/video/out/win32/menu.c b/video/out/win32/menu.c
index 25681e8ae3..98891d32d6 100644
--- a/video/out/win32/menu.c
+++ b/video/out/win32/menu.c
@@ -25,6 +25,8 @@
#include "menu.h"
struct menu_ctx {
+ HWND hwnd;
+ bool updated;
HMENU menu;
void *ta_data; // talloc context for MENUITEMINFOW.dwItemData
};
@@ -178,9 +180,11 @@ static void build_menu(void *talloc_ctx, HMENU hmenu, struct mpv_node *node)
}
}
-struct menu_ctx *mp_win32_menu_init(void)
+struct menu_ctx *mp_win32_menu_init(HWND hwnd)
{
struct menu_ctx *ctx = talloc_ptrtype(NULL, ctx);
+ ctx->hwnd = hwnd;
+ ctx->updated = false;
ctx->menu = CreatePopupMenu();
ctx->ta_data = talloc_new(ctx);
return ctx;
@@ -218,6 +222,17 @@ void mp_win32_menu_update(struct menu_ctx *ctx, struct mpv_node *data)
talloc_free_children(ctx->ta_data);
build_menu(ctx->ta_data, ctx->menu, data);
+ if (!ctx->updated) {
+ append_menu(GetSystemMenu(ctx->hwnd, FALSE), MIIM_FTYPE, MFT_SEPARATOR, 0, NULL, NULL, NULL);
+ append_menu(GetSystemMenu(ctx->hwnd, FALSE), MIIM_STRING | MIIM_SUBMENU, 0, 0,
+ build_title(ctx->ta_data, "mpv", NULL), ctx->menu, NULL);
+ ctx->updated = true;
+ } else if (data->format != MPV_FORMAT_NODE_ARRAY) {
+ // recreate ctx->menu because it is destroyed here
+ GetSystemMenu(ctx->hwnd, TRUE);
+ ctx->menu = CreatePopupMenu();
+ ctx->updated = false;
+ }
}
const char* mp_win32_menu_get_cmd(struct menu_ctx *ctx, UINT id)