Commit: 02c7aa445508aa8d3410625faa6ab046aa4d61d0
Author: Antony Riakiotakis
Date:   Tue Jul 8 19:32:51 2014 +0300
https://developer.blender.org/rB02c7aa445508aa8d3410625faa6ab046aa4d61d0

Proper implementation of click style override:

Guide: This is added for double key combinations. In these situations,
holding the second key can be taxing and stretching for the hand.

Forcing a click style here is better. Ctrl-Tab for edit mode selection
uses this override currently.

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

M       source/blender/editors/include/UI_interface.h
M       source/blender/editors/interface/interface_handlers.c
M       source/blender/editors/interface/interface_intern.h
M       source/blender/editors/interface/interface_regions.c
M       source/blender/editors/mesh/mesh_ops.c
M       source/blender/editors/sculpt_paint/paint_ops.c
M       source/blender/editors/space_view3d/view3d_ops.c
M       source/blender/windowmanager/WM_keymap.h
M       source/blender/windowmanager/intern/wm_keymap.c
M       source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/source/blender/editors/include/UI_interface.h 
b/source/blender/editors/include/UI_interface.h
index 0ed849c..7b40aa6 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -358,9 +358,9 @@ bool uiPupMenuInvoke(struct bContext *C, const char 
*idname, struct ReportList *
 /* Pie menus */
 typedef struct uiPieMenu uiPieMenu;
 
-void uiPieMenuInvoke(struct bContext *C, const char *idname, const struct 
wmEvent *event, bool force_hold);
+void uiPieMenuInvoke(struct bContext *C, const char *idname, const struct 
wmEvent *event, bool force_click);
 void uiPieOperatorEnumInvoke(struct bContext *C, const char *title, const char 
*opname,
-                             const char *propname, const struct wmEvent 
*event, bool force_hold);
+                             const char *propname, const struct wmEvent 
*event, bool force_click);
 uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon, 
const struct wmEvent *event, bool force_hold) ATTR_NONNULL();
 void uiPieMenuEnd(struct bContext *C, uiPieMenu *pie);
 struct uiLayout *uiPieMenuLayout(struct uiPieMenu *pie);
diff --git a/source/blender/editors/interface/interface_handlers.c 
b/source/blender/editors/interface/interface_handlers.c
index 120957c..c5ae85f 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -8422,6 +8422,7 @@ static int ui_handler_pie(bContext *C, const wmEvent 
*event, uiPopupBlockHandle
        uiBlock *block;
        int mx, my;
        double duration;
+       bool is_click_style;
 
        /* we block all events, this is modal interaction, except for drop 
events which is described below */
        int retval = WM_UI_HANDLER_BREAK;
@@ -8435,6 +8436,8 @@ static int ui_handler_pie(bContext *C, const wmEvent 
*event, uiPopupBlockHandle
        ar = menu->region;
        block = ar->uiblocks.first;
 
+       is_click_style = (U.pie_interaction_type == USER_UI_PIE_CLICK) || 
(block->pie_data.flags & UI_PIE_CLICK_STYLE);
+
        if (menu->scrolltimer == NULL) {
                menu->scrolltimer =
                    WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), 
TIMER, PIE_MENU_INTERVAL);
@@ -8506,7 +8509,7 @@ static int ui_handler_pie(bContext *C, const wmEvent 
*event, uiPopupBlockHandle
                        ED_region_tag_redraw(ar);
                }
                else {
-                       if (U.pie_interaction_type == USER_UI_PIE_DRAG) {
+                       if (!is_click_style) {
                                retval = ui_pie_menu_apply(C, menu, event, 
true);
                        }
                }
@@ -8521,7 +8524,7 @@ static int ui_handler_pie(bContext *C, const wmEvent 
*event, uiPopupBlockHandle
 
                        case LEFTMOUSE:
                                if (event->val == KM_PRESS) {
-                                       if ((U.pie_interaction_type == 
USER_UI_PIE_CLICK) || (block->pie_data.flags & UI_PIE_CLICK_STYLE)) {
+                                       if (is_click_style) {
                                                retval = ui_pie_menu_apply(C, 
menu, event, false);
                                        }
                                        else {
diff --git a/source/blender/editors/interface/interface_intern.h 
b/source/blender/editors/interface/interface_intern.h
index 3114026..52ba3e6 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -165,8 +165,7 @@ typedef enum RadialDirection {
 #define UI_PIE_INVALID_DIR         (1 << 3) /* mouse not far enough from 
center position  */
 #define UI_PIE_CANCELLED           (1 << 4) /* pie menu cancelled but we still 
wait for a release event  */
 #define UI_PIE_CLICK_STYLE         (1 << 5) /* pie menu changed to click 
style, click to confirm  */
-#define UI_PIE_FORCE_HOLD_STYLE    (1 << 6) /* pie menu forced to hold style. 
Usually for operators  */
-#define UI_PIE_ANIMATION_FINISHED  (1 << 7) /* pie animation finished, do not 
calculate any more motio  */
+#define UI_PIE_ANIMATION_FINISHED  (1 << 6) /* pie animation finished, do not 
calculate any more motio  */
 
 typedef struct uiLinkLine {  /* only for draw/edit */
        struct uiLinkLine *next, *prev;
diff --git a/source/blender/editors/interface/interface_regions.c 
b/source/blender/editors/interface/interface_regions.c
index e0eab09..1c9d9a4 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -2675,7 +2675,7 @@ struct uiPieMenu *uiPieMenuBegin(struct bContext *C, 
const char *title, int icon
        pie->block_radial->flag |= UI_BLOCK_RADIAL;
        pie->block_radial->pie_data.event = event->type;
        if (force_hold)
-               pie->block_radial->pie_data.flags |= UI_PIE_FORCE_HOLD_STYLE;
+               pie->block_radial->pie_data.flags |= UI_PIE_CLICK_STYLE;
 
        pie->layout = uiBlockLayout(pie->block_radial, UI_LAYOUT_VERTICAL, 
UI_LAYOUT_PIEMENU, 0, 0, 200, 0, 0, style);
        pie->mx = event->x;
@@ -2720,7 +2720,7 @@ uiLayout *uiPieMenuLayout(uiPieMenu *pie)
        return pie->layout;
 }
 
-void uiPieMenuInvoke(struct bContext *C, const char *idname, const wmEvent 
*event, bool force_hold)
+void uiPieMenuInvoke(struct bContext *C, const char *idname, const wmEvent 
*event, bool force_click)
 {
        uiPieMenu *pie;
        uiLayout *layout;
@@ -2735,7 +2735,7 @@ void uiPieMenuInvoke(struct bContext *C, const char 
*idname, const wmEvent *even
        if (mt->poll && mt->poll(C, mt) == 0)
                return;
 
-       pie = uiPieMenuBegin(C, IFACE_(mt->label), ICON_NONE, event, 
force_hold);
+       pie = uiPieMenuBegin(C, IFACE_(mt->label), ICON_NONE, event, 
force_click);
        layout = uiPieMenuLayout(pie);
 
        menu.layout = layout;
@@ -2752,12 +2752,12 @@ void uiPieMenuInvoke(struct bContext *C, const char 
*idname, const wmEvent *even
 
 
 void uiPieOperatorEnumInvoke(struct bContext *C, const char *title, const char 
*opname,
-                             const char *propname, const wmEvent *event, bool 
force_hold)
+                             const char *propname, const wmEvent *event, bool 
force_click)
 {
        uiPieMenu *pie;
        uiLayout *layout;
 
-       pie = uiPieMenuBegin(C, IFACE_(title), ICON_NONE, event, force_hold);
+       pie = uiPieMenuBegin(C, IFACE_(title), ICON_NONE, event, force_click);
        layout = uiPieMenuLayout(pie);
 
        layout = uiLayoutRadial(layout);
diff --git a/source/blender/editors/mesh/mesh_ops.c 
b/source/blender/editors/mesh/mesh_ops.c
index 1398bd9..cf1f338 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -343,7 +343,7 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
        WM_keymap_add_item(keymap, "MESH_OT_select_similar", GKEY, KM_PRESS, 
KM_SHIFT, 0);
        
        /* selection mode */
-       WM_keymap_add_pie_menu(keymap, "VIEW3D_MT_edit_mesh_select_mode", 
TABKEY, KM_PRESS, KM_CTRL, 0);
+       WM_keymap_add_pie_menu(keymap, "VIEW3D_MT_edit_mesh_select_mode", 
TABKEY, KM_PRESS, KM_CTRL, 0, true);
        
        /* hide */
        kmi = WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c 
b/source/blender/editors/sculpt_paint/paint_ops.c
index c433f75..b89acba 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -1197,7 +1197,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
        kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", SKEY, 
KM_PRESS, KM_SHIFT, 0);
        RNA_string_set(kmi->ptr, "data_path", 
"tool_settings.sculpt.brush.use_smooth_stroke");
 
-       WM_keymap_add_pie_menu(keymap, "VIEW3D_PIE_tests", QKEY, KM_PRESS, 0, 
0);
+       WM_keymap_add_pie_menu(keymap, "VIEW3D_PIE_tests", QKEY, KM_PRESS, 0, 
0, false);
 
        kmi = WM_keymap_add_item(keymap, "WM_OT_context_menu_enum", RKEY, 
KM_PRESS, 0, 0);
        RNA_string_set(kmi->ptr, "data_path", 
"tool_settings.sculpt.brush.texture_angle_source_random");
diff --git a/source/blender/editors/space_view3d/view3d_ops.c 
b/source/blender/editors/space_view3d/view3d_ops.c
index 50e4f65..c75adf6 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -294,7 +294,7 @@ void view3d_keymap(wmKeyConfig *keyconf)
        RNA_boolean_set(kmi->ptr, "center", true);
 
        /* numpad view hotkeys*/
-       WM_keymap_add_pie_menu(keymap, "VIEW3D_PIE_view", QKEY, KM_PRESS, 0, 0);
+       WM_keymap_add_pie_menu(keymap, "VIEW3D_PIE_view", QKEY, KM_PRESS, 0, 0, 
false);
 
        RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD0, 
KM_PRESS, 0, 0)->ptr, "type", RV3D_VIEW_CAMERA);
        RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, 
KM_PRESS, 0, 0)->ptr, "type", RV3D_VIEW_FRONT);
diff --git a/source/blender/windowmanager/WM_keymap.h 
b/source/blender/windowmanager/WM_keymap.h
index bf81972..c609549 100644
--- a/source/blender/windowmanager/WM_keymap.h
+++ b/source/blender/windowmanager/WM_keymap.h
@@ -65,7 +65,7 @@ wmKeyMapItem *WM_keymap_add_item(struct wmKeyMap *keymap, 
const char *idname, in
 wmKeyMapItem *WM_keymap_add_menu(struct wmKeyMap *keymap, const char *idname, 
int type,
                                  int val, int modifier, int keymodifier);
 wmKeyMapItem *WM_keymap_add_pie_menu(struct wmKeyMap *keymap, const char 
*idname, int type,
-                                     int val, int modifier, int keymodifier);
+                                     int val, int modifier, int keymodifier, 
bool force_click);
 
 bool        WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem 
*kmi);
 int         WM_keymap_item_to_string(wmKeyMapItem *kmi, char *str, const int 
len);
diff --git a/source/blender/windowmanager/intern/wm_keymap.c 
b/source/blender/windowmanager/intern/wm_keymap.c
index 5a32c99..3c76acd 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -464,10 +464,11 @@ wmKeyMapItem *WM_keymap_add_menu(wmKeyMap *keymap, const 
char *idname, int type,
        return kmi;
 }
 
-wmKeyMapItem *WM_keymap_add_pie_menu(wmKeyMap *keymap, const char *idname, int 
type, int val, int modifier, int keymodifier)
+wmKeyMapItem *WM_keymap_add_pie_menu(wmKeyMap *keymap, const char *idname, int 
type, int val, int modifier, int keymodifier, bool force_click)
 {
        wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_pie_menu", 
type, val, modifier, keymodifier);
        RNA_string_set(kmi->ptr, "name", idname);
+       RNA_boolean_set(kmi->ptr, "force_click", force_click);
        return kmi;
 }
 
diff --git a/source/blender/windowmanager/intern/wm_operators.c 
b/source/blender/windowmanager/intern/wm_operators.c
index e6ef524..8153e71 100644
--- a/source/blender/windowmana

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to