[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