Fix: avoid tagging file as modified when clicking in node editor

This commit is contained in:
Jacques Lucke
2024-05-02 01:43:45 +02:00
parent 6cb9b7299d
commit 5bc949b4a7
4 changed files with 23 additions and 12 deletions

View File

@@ -642,7 +642,11 @@ bool nodeIsParentAndChild(const bNode *parent, const bNode *child);
int nodeCountSocketLinks(const bNodeTree *ntree, const bNodeSocket *sock);
void nodeSetSelected(bNode *node, bool select);
/**
* Selects or deselects the node. If the node is deselected, all its sockets are deselected too.
* \return True if any selection was changed.
*/
bool nodeSetSelected(bNode *node, bool select);
/**
* Two active flags, ID nodes have special flag for buttons display.
*/

View File

@@ -3839,20 +3839,26 @@ bNode *nodeGetActive(bNodeTree *ntree)
return nullptr;
}
void nodeSetSelected(bNode *node, const bool select)
bool nodeSetSelected(bNode *node, const bool select)
{
if (select) {
node->flag |= NODE_SELECT;
return;
bool changed = false;
if (select != ((node->flag & NODE_SELECT) != 0)) {
changed = true;
SET_FLAG_FROM_TEST(node->flag, select, NODE_SELECT);
}
node->flag &= ~NODE_SELECT;
/* deselect sockets too */
if (select) {
return changed;
}
/* Deselect sockets too. */
LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
changed |= (sock->flag & NODE_SELECT) != 0;
sock->flag &= ~NODE_SELECT;
}
LISTBASE_FOREACH (bNodeSocket *, sock, &node->outputs) {
changed |= (sock->flag & NODE_SELECT) != 0;
sock->flag &= ~NODE_SELECT;
}
return changed;
}
void nodeClearActive(bNodeTree *ntree)

View File

@@ -203,7 +203,7 @@ void node_keymap(wmKeyConfig *keyconf);
rctf node_frame_rect_inside(const SpaceNode &snode, const bNode &node);
bool node_or_socket_isect_event(const bContext &C, const wmEvent &event);
void node_deselect_all(bNodeTree &node_tree);
bool node_deselect_all(bNodeTree &node_tree);
void node_socket_select(bNode *node, bNodeSocket &sock);
void node_socket_deselect(bNode *node, bNodeSocket &sock, bool deselect_node);
void node_deselect_all_input_sockets(bNodeTree &node_tree, bool deselect_nodes);

View File

@@ -245,11 +245,13 @@ static void node_socket_toggle(bNode *node, bNodeSocket &sock, bool deselect_nod
}
}
void node_deselect_all(bNodeTree &node_tree)
bool node_deselect_all(bNodeTree &node_tree)
{
bool changed = false;
for (bNode *node : node_tree.all_nodes()) {
nodeSetSelected(node, false);
changed |= nodeSetSelected(node, false);
}
return changed;
}
void node_deselect_all_input_sockets(bNodeTree &node_tree, const bool deselect_nodes)
@@ -631,8 +633,7 @@ static bool node_mouse_select(bContext *C,
}
else if (found || params->deselect_all) {
/* Deselect everything. */
node_deselect_all(node_tree);
changed = true;
changed = node_deselect_all(node_tree);
}
}