[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53123] trunk/blender/source/blender/ editors/interface/interface_panel.c: Fixes for ctrl+click on panel header:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Dec 18 15:46:03 CET 2012


Revision: 53123
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53123
Author:   blendix
Date:     2012-12-18 14:46:00 +0000 (Tue, 18 Dec 2012)
Log Message:
-----------
Fixes for ctrl+click on panel header:
* It collapsed panels in other tabs too
* Ctrl + click next to the panel header still caused panels do be collapsed
* Ctrl + Return over panel header now works as well

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_panel.c

Modified: trunk/blender/source/blender/editors/interface/interface_panel.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_panel.c	2012-12-18 14:11:19 UTC (rev 53122)
+++ trunk/blender/source/blender/editors/interface/interface_panel.c	2012-12-18 14:46:00 UTC (rev 53123)
@@ -164,15 +164,20 @@
 
 /****************************** panels ******************************/
 
-static void panels_collapse_all(ScrArea *sa, ARegion *ar)
+static void panels_collapse_all(ScrArea *sa, ARegion *ar, Panel *from_pa)
 {
 	Panel *pa;
+	PanelType *pt, *from_pt;
 	int flag = ((panel_aligned(sa, ar) == BUT_HORIZONTAL) ? PNL_CLOSEDX : PNL_CLOSEDY);
 
 	for (pa = ar->panels.first; pa; pa = pa->next) {
-		if (pa->type && !(pa->type->flag & PNL_NO_HEADER)) {
-			pa->flag = flag;
-		}
+		pt = pa->type;
+		from_pt = from_pa->type;
+
+		/* close panels with headers in the same context */
+		if (pt && from_pt && !(pt->flag & PNL_NO_HEADER))
+			if (!pt->context[0] || strcmp(pt->context, from_pt->context) == 0)
+				pa->flag = flag;
 	}
 }
 
@@ -1028,7 +1033,7 @@
 
 /* this function is supposed to call general window drawing too */
 /* also it supposes a block has panel, and isn't a menu */
-static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, int my, int event)
+static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, int my, int event, int ctrl)
 {
 	ScrArea *sa = CTX_wm_area(C);
 	ARegion *ar = CTX_wm_region(C);
@@ -1061,6 +1066,9 @@
 			ED_region_tag_redraw(ar);
 		}
 		else {  /* collapse */
+			if(ctrl)
+				panels_collapse_all(sa, ar, block->panel);
+
 			if (block->panel->flag & PNL_CLOSED) {
 				block->panel->flag &= ~PNL_CLOSED;
 				/* snap back up so full panel aligns with screen edge */
@@ -1100,7 +1108,6 @@
 
 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;
@@ -1148,10 +1155,10 @@
 				
 				if (pa->flag & PNL_CLOSEDY) {
 					if ((block->rect.ymax <= my) && (block->rect.ymax + PNL_HEADER >= my))
-						ui_handle_panel_header(C, block, mx, my, event->type);
+						ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl);
 				}
 				else
-					ui_handle_panel_header(C, block, mx, my, event->type);
+					ui_handle_panel_header(C, block, mx, my, event->type, event->ctrl);
 				
 				continue;
 			}
@@ -1168,7 +1175,7 @@
 				/* open close on header */
 				if (ELEM(event->type, RETKEY, PADENTER)) {
 					if (inside_header) {
-						ui_handle_panel_header(C, block, mx, my, RETKEY);
+						ui_handle_panel_header(C, block, mx, my, RETKEY, event->ctrl);
 						retval = WM_UI_HANDLER_BREAK;
 						break;
 					}
@@ -1178,9 +1185,7 @@
 					retval = WM_UI_HANDLER_BREAK;
 					
 					if (inside_header) {
-						if (event->ctrl)
-							panels_collapse_all(sa, ar);
-						ui_handle_panel_header(C, block, mx, my, 0);
+						ui_handle_panel_header(C, block, mx, my, 0, event->ctrl);
 						retval = WM_UI_HANDLER_BREAK;
 						break;
 					}




More information about the Bf-blender-cvs mailing list