Fix: Nav_bar context menu in preferences
Also merge the keymaps for header/footer/navbar. D4736 by @Gvgeo with edits
This commit is contained in:
parent
f09aead64a
commit
dea8fb2bea
Notes:
blender-bot
2023-02-14 11:24:03 +01:00
Referenced by issue #63860, Right-clicking navbar of User Preferences inconsistent
|
@ -54,8 +54,7 @@ _km_hierarchy = [
|
|||
('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
|
||||
('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
|
||||
('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners
|
||||
('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region)
|
||||
('Footer', 'EMPTY', 'WINDOW', []), # footer stuff (per region)
|
||||
('Region Context Menu', 'EMPTY', 'WINDOW', []), # header/footer/navigation_bar stuff (per region)
|
||||
]),
|
||||
|
||||
('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region)
|
||||
|
|
|
@ -525,31 +525,16 @@ def km_screen_editing(params):
|
|||
return keymap
|
||||
|
||||
|
||||
def km_header(_params):
|
||||
def km_screen_region_context_menu(_params):
|
||||
items = []
|
||||
keymap = (
|
||||
"Header",
|
||||
"Region Context Menu",
|
||||
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
|
||||
{"items": items},
|
||||
)
|
||||
|
||||
items.extend([
|
||||
("screen.header_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
|
||||
])
|
||||
|
||||
return keymap
|
||||
|
||||
|
||||
def km_footer(_params):
|
||||
items = []
|
||||
keymap = (
|
||||
"Footer",
|
||||
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
|
||||
{"items": items},
|
||||
)
|
||||
|
||||
items.extend([
|
||||
("screen.footer_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
|
||||
("screen.region_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
|
||||
])
|
||||
|
||||
return keymap
|
||||
|
@ -6038,8 +6023,7 @@ def generate_keymaps(params=None):
|
|||
km_window(params),
|
||||
km_screen(params),
|
||||
km_screen_editing(params),
|
||||
km_header(params),
|
||||
km_footer(params),
|
||||
km_screen_region_context_menu(params),
|
||||
km_view2d(params),
|
||||
km_view2d_buttons_list(params),
|
||||
km_user_interface(params),
|
||||
|
|
|
@ -284,16 +284,16 @@ def km_screen_editing(params):
|
|||
return keymap
|
||||
|
||||
|
||||
def km_header(_params):
|
||||
def km_screen_region_context_menu(_params):
|
||||
items = []
|
||||
keymap = (
|
||||
"Header",
|
||||
"Region Context Menu",
|
||||
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
|
||||
{"items": items},
|
||||
)
|
||||
|
||||
items.extend([
|
||||
("screen.header_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
|
||||
("screen.region_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
|
||||
])
|
||||
|
||||
return keymap
|
||||
|
@ -3634,7 +3634,7 @@ def generate_keymaps(params=None):
|
|||
km_window(params),
|
||||
km_screen(params),
|
||||
km_screen_editing(params),
|
||||
km_header(params),
|
||||
km_screen_region_context_menu(params),
|
||||
km_view2d(params),
|
||||
km_view2d_buttons_list(params),
|
||||
km_user_interface(params),
|
||||
|
|
|
@ -436,11 +436,13 @@ enum {
|
|||
ED_KEYMAP_GIZMO = (1 << 2),
|
||||
ED_KEYMAP_TOOL = (1 << 3),
|
||||
ED_KEYMAP_VIEW2D = (1 << 4),
|
||||
ED_KEYMAP_ANIMATION = (1 << 5),
|
||||
ED_KEYMAP_FRAMES = (1 << 6),
|
||||
ED_KEYMAP_HEADER = (1 << 7),
|
||||
ED_KEYMAP_GPENCIL = (1 << 8),
|
||||
ED_KEYMAP_MARKERS = (1 << 5),
|
||||
ED_KEYMAP_ANIMATION = (1 << 6),
|
||||
ED_KEYMAP_FRAMES = (1 << 7),
|
||||
ED_KEYMAP_HEADER = (1 << 8),
|
||||
ED_KEYMAP_FOOTER = (1 << 9),
|
||||
ED_KEYMAP_GPENCIL = (1 << 10),
|
||||
ED_KEYMAP_NAVBAR = (1 << 11),
|
||||
};
|
||||
|
||||
/* SCREEN_OT_space_context_cycle direction */
|
||||
|
|
|
@ -1627,14 +1627,19 @@ static void ed_default_handlers(
|
|||
}
|
||||
if (flag & ED_KEYMAP_HEADER) {
|
||||
/* standard keymap for headers regions */
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Header", 0, 0);
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
|
||||
WM_event_add_keymap_handler(handlers, keymap);
|
||||
}
|
||||
if (flag & ED_KEYMAP_FOOTER) {
|
||||
/* standard keymap for footer regions */
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Footer", 0, 0);
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
|
||||
WM_event_add_keymap_handler(handlers, keymap);
|
||||
}
|
||||
if (flag & ED_KEYMAP_NAVBAR) {
|
||||
/* standard keymap for Navigation bar regions */
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Region Context Menu", 0, 0);
|
||||
WM_event_add_keymap_handler(&ar->handlers, keymap);
|
||||
}
|
||||
|
||||
/* Keep last because of LMB/RMB handling, see: T57527. */
|
||||
if (flag & ED_KEYMAP_GPENCIL) {
|
||||
|
|
|
@ -3955,10 +3955,10 @@ static void SCREEN_OT_header_toggle_menus(wmOperatorType *ot)
|
|||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Header Tools Operator
|
||||
/** \name Region Context Menu Operator (Header/Footer/Navbar)
|
||||
* \{ */
|
||||
|
||||
static bool header_context_menu_poll(bContext *C)
|
||||
static bool screen_region_context_menu_poll(bContext *C)
|
||||
{
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
return (sa && sa->spacetype != SPACE_STATUSBAR);
|
||||
|
@ -4008,33 +4008,82 @@ void ED_screens_header_tools_menu_create(bContext *C, uiLayout *layout, void *UN
|
|||
}
|
||||
}
|
||||
|
||||
static int header_context_menu_invoke(bContext *C,
|
||||
void ED_screens_footer_tools_menu_create(bContext *C, uiLayout *layout, void *UNUSED(arg))
|
||||
{
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
const char *but_flip_str = (ar->alignment == RGN_ALIGN_TOP) ? IFACE_("Flip to Bottom") :
|
||||
IFACE_("Flip to Top");
|
||||
|
||||
uiItemO(layout, IFACE_("Toggle Footer"), ICON_NONE, "SCREEN_OT_footer");
|
||||
|
||||
/* default is WM_OP_INVOKE_REGION_WIN, which we don't want here. */
|
||||
uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT);
|
||||
|
||||
uiItemO(layout, but_flip_str, ICON_NONE, "SCREEN_OT_region_flip");
|
||||
|
||||
/* file browser should be fullscreen all the time, topbar should
|
||||
* never be. But other regions can be maximized/restored... */
|
||||
if (!ELEM(sa->spacetype, SPACE_FILE, SPACE_TOPBAR)) {
|
||||
uiItemS(layout);
|
||||
|
||||
const char *but_str = sa->full ? IFACE_("Tile Area") : IFACE_("Maximize Area");
|
||||
uiItemO(layout, but_str, ICON_NONE, "SCREEN_OT_screen_full_area");
|
||||
}
|
||||
}
|
||||
|
||||
void ED_screens_navigation_bar_tools_menu_create(bContext *C, uiLayout *layout, void *UNUSED(arg))
|
||||
{
|
||||
const ARegion *ar = CTX_wm_region(C);
|
||||
const char *but_flip_str = (ar->alignment == RGN_ALIGN_LEFT) ? IFACE_("Flip to Right") :
|
||||
IFACE_("Flip to Left");
|
||||
|
||||
/* default is WM_OP_INVOKE_REGION_WIN, which we don't want here. */
|
||||
uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT);
|
||||
|
||||
uiItemO(layout, but_flip_str, ICON_NONE, "SCREEN_OT_region_flip");
|
||||
}
|
||||
|
||||
static int screen_context_menu_invoke(bContext *C,
|
||||
wmOperator *UNUSED(op),
|
||||
const wmEvent *UNUSED(event))
|
||||
{
|
||||
uiPopupMenu *pup;
|
||||
uiLayout *layout;
|
||||
const ARegion *ar = CTX_wm_region(C);
|
||||
|
||||
pup = UI_popup_menu_begin(C, IFACE_("Header"), ICON_NONE);
|
||||
layout = UI_popup_menu_layout(pup);
|
||||
|
||||
ED_screens_header_tools_menu_create(C, layout, NULL);
|
||||
|
||||
UI_popup_menu_end(C, pup);
|
||||
if (ELEM(ar->regiontype, RGN_TYPE_HEADER, RGN_TYPE_TOOL_HEADER)) {
|
||||
pup = UI_popup_menu_begin(C, IFACE_("Header"), ICON_NONE);
|
||||
layout = UI_popup_menu_layout(pup);
|
||||
ED_screens_header_tools_menu_create(C, layout, NULL);
|
||||
UI_popup_menu_end(C, pup);
|
||||
}
|
||||
else if (ar->regiontype == RGN_TYPE_FOOTER) {
|
||||
pup = UI_popup_menu_begin(C, IFACE_("Footer"), ICON_NONE);
|
||||
layout = UI_popup_menu_layout(pup);
|
||||
ED_screens_footer_tools_menu_create(C, layout, NULL);
|
||||
UI_popup_menu_end(C, pup);
|
||||
}
|
||||
else if (ar->regiontype == RGN_TYPE_NAV_BAR) {
|
||||
pup = UI_popup_menu_begin(C, IFACE_("Navigation Bar"), ICON_NONE);
|
||||
layout = UI_popup_menu_layout(pup);
|
||||
ED_screens_navigation_bar_tools_menu_create(C, layout, NULL);
|
||||
UI_popup_menu_end(C, pup);
|
||||
}
|
||||
|
||||
return OPERATOR_INTERFACE;
|
||||
}
|
||||
|
||||
static void SCREEN_OT_header_context_menu(wmOperatorType *ot)
|
||||
static void SCREEN_OT_region_context_menu(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name = "Header Context Menu";
|
||||
ot->description = "Display header region context menu";
|
||||
ot->idname = "SCREEN_OT_header_context_menu";
|
||||
ot->name = "Region Context Menu";
|
||||
ot->description = "Display region context menu";
|
||||
ot->idname = "SCREEN_OT_region_context_menu";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = header_context_menu_poll;
|
||||
ot->invoke = header_context_menu_invoke;
|
||||
ot->poll = screen_region_context_menu_poll;
|
||||
ot->invoke = screen_context_menu_invoke;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
@ -4073,89 +4122,6 @@ static void SCREEN_OT_footer(wmOperatorType *ot)
|
|||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Footer Tools Operator
|
||||
* \{ */
|
||||
|
||||
static bool footer_context_menu_poll(bContext *C)
|
||||
{
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
return sa;
|
||||
}
|
||||
|
||||
void ED_screens_footer_tools_menu_create(bContext *C, uiLayout *layout, void *UNUSED(arg))
|
||||
{
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
const char *but_flip_str = (ar->alignment == RGN_ALIGN_TOP) ? IFACE_("Flip to Bottom") :
|
||||
IFACE_("Flip to Top");
|
||||
|
||||
uiItemO(layout, IFACE_("Toggle Footer"), ICON_NONE, "SCREEN_OT_footer");
|
||||
|
||||
/* default is WM_OP_INVOKE_REGION_WIN, which we don't want here. */
|
||||
uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT);
|
||||
|
||||
uiItemO(layout, but_flip_str, ICON_NONE, "SCREEN_OT_region_flip");
|
||||
|
||||
/* file browser should be fullscreen all the time, topbar should
|
||||
* never be. But other regions can be maximized/restored... */
|
||||
if (!ELEM(sa->spacetype, SPACE_FILE, SPACE_TOPBAR)) {
|
||||
uiItemS(layout);
|
||||
|
||||
const char *but_str = sa->full ? IFACE_("Tile Area") : IFACE_("Maximize Area");
|
||||
uiItemO(layout, but_str, ICON_NONE, "SCREEN_OT_screen_full_area");
|
||||
}
|
||||
}
|
||||
|
||||
static int footer_context_menu_invoke(bContext *C,
|
||||
wmOperator *UNUSED(op),
|
||||
const wmEvent *UNUSED(event))
|
||||
{
|
||||
uiPopupMenu *pup;
|
||||
uiLayout *layout;
|
||||
|
||||
pup = UI_popup_menu_begin(C, IFACE_("Footer"), ICON_NONE);
|
||||
layout = UI_popup_menu_layout(pup);
|
||||
|
||||
ED_screens_footer_tools_menu_create(C, layout, NULL);
|
||||
|
||||
UI_popup_menu_end(C, pup);
|
||||
|
||||
return OPERATOR_INTERFACE;
|
||||
}
|
||||
|
||||
static void SCREEN_OT_footer_context_menu(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name = "Footer Context Menu";
|
||||
ot->description = "Display footer region context menu";
|
||||
ot->idname = "SCREEN_OT_footer_context_menu";
|
||||
|
||||
/* api callbacks */
|
||||
ot->poll = footer_context_menu_poll;
|
||||
ot->invoke = footer_context_menu_invoke;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Navigation Bar Tools Menu
|
||||
* \{ */
|
||||
|
||||
void ED_screens_navigation_bar_tools_menu_create(bContext *C, uiLayout *layout, void *UNUSED(arg))
|
||||
{
|
||||
const ARegion *ar = CTX_wm_region(C);
|
||||
const char *but_flip_str = (ar->alignment == RGN_ALIGN_LEFT) ? IFACE_("Flip to Right") :
|
||||
IFACE_("Flip to Left");
|
||||
|
||||
/* default is WM_OP_INVOKE_REGION_WIN, which we don't want here. */
|
||||
uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT);
|
||||
|
||||
uiItemO(layout, but_flip_str, ICON_NONE, "SCREEN_OT_region_flip");
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Animation Step Operator
|
||||
*
|
||||
|
@ -5299,9 +5265,8 @@ void ED_operatortypes_screen(void)
|
|||
WM_operatortype_append(SCREEN_OT_region_scale);
|
||||
WM_operatortype_append(SCREEN_OT_region_flip);
|
||||
WM_operatortype_append(SCREEN_OT_header_toggle_menus);
|
||||
WM_operatortype_append(SCREEN_OT_header_context_menu);
|
||||
WM_operatortype_append(SCREEN_OT_region_context_menu);
|
||||
WM_operatortype_append(SCREEN_OT_footer);
|
||||
WM_operatortype_append(SCREEN_OT_footer_context_menu);
|
||||
WM_operatortype_append(SCREEN_OT_screen_set);
|
||||
WM_operatortype_append(SCREEN_OT_screen_full_area);
|
||||
WM_operatortype_append(SCREEN_OT_back_to_previous);
|
||||
|
|
|
@ -56,15 +56,10 @@
|
|||
|
||||
static int context_menu_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
|
||||
{
|
||||
const ARegion *ar = CTX_wm_region(C);
|
||||
uiPopupMenu *pup = UI_popup_menu_begin(C, IFACE_("Context Menu"), ICON_NONE);
|
||||
uiLayout *layout = UI_popup_menu_layout(pup);
|
||||
|
||||
uiItemM(layout, "INFO_MT_area", NULL, ICON_NONE);
|
||||
if (ar->regiontype == RGN_TYPE_NAV_BAR) {
|
||||
ED_screens_navigation_bar_tools_menu_create(C, layout, NULL);
|
||||
}
|
||||
|
||||
UI_popup_menu_end(C, pup);
|
||||
|
||||
return OPERATOR_INTERFACE;
|
||||
|
|
|
@ -400,9 +400,6 @@ static void buttons_header_region_message_subscribe(const bContext *UNUSED(C),
|
|||
|
||||
static void buttons_navigation_bar_region_init(wmWindowManager *wm, ARegion *ar)
|
||||
{
|
||||
wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Property Editor", SPACE_PROPERTIES, 0);
|
||||
WM_event_add_keymap_handler(&ar->handlers, keymap);
|
||||
|
||||
ar->flag |= RGN_FLAG_PREFSIZE_OR_HIDDEN;
|
||||
|
||||
ED_region_panels_init(wm, ar);
|
||||
|
@ -749,7 +746,7 @@ void ED_spacetype_buttons(void)
|
|||
art->regionid = RGN_TYPE_NAV_BAR;
|
||||
art->prefsizex = AREAMINX - 3; /* XXX Works and looks best,
|
||||
* should we update AREAMINX accordingly? */
|
||||
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES;
|
||||
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES | ED_KEYMAP_NAVBAR;
|
||||
art->init = buttons_navigation_bar_region_init;
|
||||
art->draw = buttons_navigation_bar_region_draw;
|
||||
art->message_subscribe = buttons_navigation_bar_region_message_subscribe;
|
||||
|
|
|
@ -249,7 +249,7 @@ void ED_spacetype_userpref(void)
|
|||
art->init = userpref_navigation_region_init;
|
||||
art->draw = userpref_navigation_region_draw;
|
||||
art->listener = userpref_navigation_region_listener;
|
||||
art->keymapflag = ED_KEYMAP_UI;
|
||||
art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_NAVBAR;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
|
Loading…
Reference in New Issue