[Bf-blender-cvs] [be7bec33f6c] topbar: Support renaming workspaces through tabs

Julian Eisel noreply at git.blender.org
Tue Jul 18 20:52:16 CEST 2017


Commit: be7bec33f6cb2ed0bf14d2a1a41be24ac7739641
Author: Julian Eisel
Date:   Tue Jul 18 01:43:47 2017 +0200
Branches: topbar
https://developer.blender.org/rBbe7bec33f6cb2ed0bf14d2a1a41be24ac7739641

Support renaming workspaces through tabs

Rename workspaces by double or ctrl clicking their tab.

===================================================================

M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_templates.c

===================================================================

diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 56c3fd287b9..9a0be1ac628 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -2189,12 +2189,7 @@ void ui_but_string_get_ex(uiBut *but, char *str, const size_t maxlen, const int
 			MEM_freeN((void *)buf);
 		}
 	}
-	else if (but->type == UI_BTYPE_TEXT) {
-		/* string */
-		BLI_strncpy(str, but->poin, maxlen);
-		return;
-	}
-	else if (but->type == UI_BTYPE_SEARCH_MENU) {
+	else if (ELEM(but->type, UI_BTYPE_TEXT, UI_BTYPE_SEARCH_MENU, UI_BTYPE_TAB)) {
 		/* string */
 		BLI_strncpy(str, but->poin, maxlen);
 		return;
@@ -2430,7 +2425,7 @@ bool ui_but_string_set(bContext *C, uiBut *but, const char *str)
 
 		return true;
 	}
-	else if (but->type == UI_BTYPE_SEARCH_MENU) {
+	else if (ELEM(but->type, UI_BTYPE_SEARCH_MENU, UI_BTYPE_TAB)) {
 		/* string */
 		BLI_strncpy(but->poin, str, but->hardmax);
 		return true;
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 67794e3b30f..e1a061d8d70 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -938,6 +938,21 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data)
 	data->applied = true;
 }
 
+static void ui_apply_but_TAB(bContext *C, uiBut *but, uiHandleButtonData *data)
+{
+	if (data->str) {
+		ui_apply_but_TEX(C, but, data);
+		return;
+	}
+
+	ui_but_value_set(but, but->hardmax);
+
+	ui_apply_but_func(C, but);
+
+	data->retval = but->retval;
+	data->applied = true;
+}
+
 static void ui_apply_but_NUM(bContext *C, uiBut *but, uiHandleButtonData *data)
 {
 	if (data->str) {
@@ -2113,9 +2128,11 @@ static void ui_apply_but(bContext *C, uiBlock *block, uiBut *but, uiHandleButton
 			break;
 		case UI_BTYPE_ROW:
 		case UI_BTYPE_LISTROW:
-		case UI_BTYPE_TAB:
 			ui_apply_but_ROW(C, block, but, data);
 			break;
+		case UI_BTYPE_TAB:
+			ui_apply_but_TAB(C, but, data);
+			break;
 		case UI_BTYPE_SCROLL:
 		case UI_BTYPE_GRIP:
 		case UI_BTYPE_NUM:
@@ -3858,14 +3875,28 @@ static int ui_do_but_KEYEVT(
 	return WM_UI_HANDLER_CONTINUE;
 }
 
-static int ui_do_but_TAB(bContext *C, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
+static int ui_do_but_TAB(bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
 {
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
-		if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_RELEASE) {
+		if ((event->type == LEFTMOUSE) &&
+		    ((event->val == KM_DBL_CLICK) || event->ctrl))
+		{
+			button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
+			return WM_UI_HANDLER_BREAK;
+		}
+		else if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && (event->val == KM_CLICK)) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
-			return WM_UI_HANDLER_CONTINUE;
+			return WM_UI_HANDLER_BREAK;
 		}
 	}
+	else if (data->state == BUTTON_STATE_TEXT_EDITING) {
+		ui_do_but_textedit(C, block, but, data, event);
+		return WM_UI_HANDLER_BREAK;
+	}
+	else if (data->state == BUTTON_STATE_TEXT_SELECTING) {
+		ui_do_but_textedit_select(C, block, but, data, event);
+		return WM_UI_HANDLER_BREAK;
+	}
 
 	return WM_UI_HANDLER_CONTINUE;
 }
@@ -7132,7 +7163,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent *
 			retval = ui_do_but_HOTKEYEVT(C, but, data, event);
 			break;
 		case UI_BTYPE_TAB:
-			retval = ui_do_but_TAB(C, but, data, event);
+			retval = ui_do_but_TAB(C, block, but, data, event);
 			break;
 		case UI_BTYPE_BUT_TOGGLE:
 		case UI_BTYPE_TOGGLE:
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 9f3565e517c..e08b99db294 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -249,6 +249,15 @@ static void id_search_call_cb(bContext *C, void *arg_template, void *item)
 	}
 }
 
+static void id_rename_cb(bContext *C, void *arg, char *origstr)
+{
+	ID *id = arg;
+
+	if (origstr && !STREQ(id->name + 2, origstr)) {
+		BLI_libblock_ensure_unique_name(CTX_data_main(C), id->name);
+	}
+}
+
 /* ID Search browse menu, do the search */
 static void id_search_cb(const bContext *C, void *arg_template, const char *str, uiSearchItems *items)
 {
@@ -712,8 +721,12 @@ static void template_ID_tabs(
 
 		but = uiDefButR_prop(
 		        block, UI_BTYPE_TAB, 0, id_name, 0, 0, but_width, UI_UNIT_Y,
-		        &template->ptr, template->prop, 0, 0.0f, 0.0f, 0.0f, 0.0f, "");
+		        &template->ptr, template->prop, 0, 0.0f,
+		        sizeof(id->name) - 2, 0.0f, 0.0f, "");
 		UI_but_funcN_set(but, id_search_call_cb, MEM_dupallocN(template), id);
+		but->poin = &id->name[2];
+
+		UI_but_func_rename_set(but, id_rename_cb, id);
 		if (active_ptr.data == id) {
 			UI_but_flag_enable(but, UI_SELECT);
 		}




More information about the Bf-blender-cvs mailing list