[Bf-blender-cvs] [4581091] wiggly-widgets: Only detect active widget on mousemoves. Now handler operates on mouseclick (bound to change)
Antony Riakiotakis
noreply at git.blender.org
Wed Oct 15 16:38:00 CEST 2014
Commit: 4581091fc46a3a7394ca8527234b3dd316b4f886
Author: Antony Riakiotakis
Date: Wed Oct 15 16:33:16 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB4581091fc46a3a7394ca8527234b3dd316b4f886
Only detect active widget on mousemoves. Now handler operates on
mouseclick (bound to change)
===================================================================
M source/blender/editors/object/object_lamp.c
M source/blender/editors/transform/transform_manipulator.c
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_widgets.c
M source/blender/windowmanager/wm_event_system.h
===================================================================
diff --git a/source/blender/editors/object/object_lamp.c b/source/blender/editors/object/object_lamp.c
index c1d4493..8df5805 100644
--- a/source/blender/editors/object/object_lamp.c
+++ b/source/blender/editors/object/object_lamp.c
@@ -197,18 +197,16 @@ void WIDGETGROUP_lamp_update(struct wmWidgetGroup *wgroup, const struct bContext
}
-int WIDGET_lamp_handler(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget)
+int WIDGET_lamp_handler(struct bContext *C, const struct wmEvent *UNUSED(event), struct wmWidget *UNUSED(widget))
{
- if (event->type == LEFTMOUSE && event->val == KM_PRESS && (widget->flag & WM_WIDGET_HIGHLIGHT)) {
- struct PointerRNA *ptr = NULL; /* rna pointer to access properties */
- struct IDProperty *properties = NULL; /* operator properties, assigned to ptr->data and can be written to a file */
+ struct PointerRNA *ptr = NULL; /* rna pointer to access properties */
+ struct IDProperty *properties = NULL; /* operator properties, assigned to ptr->data and can be written to a file */
- WM_operator_properties_alloc(&ptr, &properties, "UI_OT_lamp_position");
- WM_operator_name_call(C, "UI_OT_lamp_position", WM_OP_INVOKE_DEFAULT, ptr);
- WM_operator_properties_free(ptr);
- MEM_freeN(ptr);
- }
+ WM_operator_properties_alloc(&ptr, &properties, "UI_OT_lamp_position");
+ WM_operator_name_call(C, "UI_OT_lamp_position", WM_OP_INVOKE_DEFAULT, ptr);
+ WM_operator_properties_free(ptr);
+ MEM_freeN(ptr);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 78425c3..b211752 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1964,8 +1964,7 @@ int WIDGET_manipulator_handler_trans(bContext *C, const struct wmEvent *event, w
struct PointerRNA *ptr = NULL; /* rna pointer to access properties */
if (!((v3d->twflag & V3D_USE_MANIPULATOR) && (v3d->twflag & V3D_DRAW_MANIPULATOR)) ||
- !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT) ||
- !((event->val == KM_PRESS) && (event->type == LEFTMOUSE)))
+ !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT))
{
return OPERATOR_PASS_THROUGH;
}
@@ -2009,8 +2008,7 @@ int WIDGET_manipulator_handler_rot(bContext *C, const struct wmEvent *event, wmW
struct PointerRNA *ptr = NULL; /* rna pointer to access properties */
if (!((v3d->twflag & V3D_USE_MANIPULATOR) && (v3d->twflag & V3D_DRAW_MANIPULATOR)) ||
- !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT) ||
- !((event->val == KM_PRESS) && (event->type == LEFTMOUSE)))
+ !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT))
{
return OPERATOR_PASS_THROUGH;
}
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 91028d2..fcab5a8 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1973,24 +1973,37 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
else if (handler->widgetmap) {
struct wmWidgetMap *wmap = handler->widgetmap;
- if (wm_widgetmap_is_3d(wmap)) {
- int ret = -1;
- wmWidget *widget;
- /* similar interface to operators */
- if ((widget = wm_widget_find_active_3D (wmap, C, event)))
- {
- wm_widgetmap_set_active_widget(wmap, C, widget);
-
- if (widget->handler && (ret = widget->handler(C, event, widget)) == OPERATOR_FINISHED) {
- action |= WM_HANDLER_BREAK;
+ switch (event->type) {
+
+ case MOUSEMOVE:
+ if (wm_widgetmap_is_3d(wmap)) {
+ wmWidget *widget;
+ /* similar interface to operators */
+ if ((widget = wm_widget_find_active_3D (wmap, C, event)))
+ {
+ wm_widgetmap_set_active_widget(wmap, C, widget);
+ }
+ else {
+ wm_widgetmap_set_active_widget(wmap, C, NULL);
+ }
}
- }
- else {
- wm_widgetmap_set_active_widget(wmap, C, NULL);
- }
- }
- else {
- wm_widgetmap_set_active_widget(wmap, C, NULL);
+ else {
+ wm_widgetmap_set_active_widget(wmap, C, NULL);
+ }
+ action |= WM_HANDLER_BREAK;
+ break;
+
+ case LEFTMOUSE:
+ if (event->val == KM_PRESS) {
+ int ret = -1;
+ wmWidget *widget = wm_widgetmap_get_active_widget(wmap);
+
+ if (widget && widget->handler && (ret = widget->handler(C, event, widget)) == OPERATOR_FINISHED) {
+ action |= WM_HANDLER_BREAK;
+ }
+
+ }
+ break;
}
}
else {
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index f7acb94..897e968 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -474,3 +474,8 @@ void wm_widgetmap_set_active_widget(struct wmWidgetMap *wmap, struct bContext *C
ED_region_tag_redraw(ar);
}
}
+
+struct wmWidget *wm_widgetmap_get_active_widget(struct wmWidgetMap *wmap)
+{
+ return wmap->active_widget;
+}
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index d8768ac..346db47 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -111,6 +111,7 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
/* wm_widgets.c */
struct wmWidget *wm_widget_find_active_3D(struct wmWidgetMap *wmap, struct bContext *C, const struct wmEvent *event);
void wm_widgetmap_set_active_widget(struct wmWidgetMap *wmap, struct bContext *C, struct wmWidget *widget);
+struct wmWidget *wm_widgetmap_get_active_widget(struct wmWidgetMap *wmap);
#endif /* __WM_EVENT_SYSTEM_H__ */
More information about the Bf-blender-cvs
mailing list