From 492d7ace57fbb405a4881ebce01d2f0358fe2e64 Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Mon, 28 May 2012 00:02:24 +0000 Subject: [PATCH] User Interface Panels: * Add a solo mode for panels, CTRL+LMB on a panel header. This closes all other panels. Patch [#22233] by sneg negr (sneg) with modifications by myself to exclude panels with hidden header (like context) --- .../blender/editors/interface/interface_panel.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index e2dbb06fa2f..92d92359814 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -164,6 +164,18 @@ static int panels_re_align(ScrArea *sa, ARegion *ar, Panel **r_pa) /****************************** panels ******************************/ +static void panels_collapse_all(ScrArea *sa, ARegion *ar) +{ + Panel *pa; + int align = panel_aligned(sa, ar); + + for (pa= ar->panels.first; pa; pa= pa->next) { + if (pa->type && !(pa->type->flag & PNL_NO_HEADER)) + pa->flag = (align==BUT_HORIZONTAL)? PNL_CLOSEDX: PNL_CLOSEDY; + } +} + + static void ui_panel_copy_offset(Panel *pa, Panel *papar) { /* with respect to sizes... papar is parent */ @@ -1074,6 +1086,7 @@ static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, in int ui_handler_panel_region(bContext *C, wmEvent *event) { + ScrArea *sa = CTX_wm_area(C); ARegion *ar = CTX_wm_region(C); uiBlock *block; Panel *pa; @@ -1141,6 +1154,8 @@ int ui_handler_panel_region(bContext *C, wmEvent *event) } else if (event->type == LEFTMOUSE) { if (inside_header) { + if (event->ctrl) + panels_collapse_all(sa, ar); ui_handle_panel_header(C, block, mx, my, 0); break; }