Commit: 6178014eaf1271ca2a83c38310cb2f2794127826
Author: Antonio Vazquez
Date:   Sun Jun 11 17:32:28 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB6178014eaf1271ca2a83c38310cb2f2794127826

Implement Ctrl+Tab key to swith modes

The Tab key switch between GP mode and object mode or edit if it was in object 
mode.

Ctrl+Tab switch between last mode

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

M       source/blender/editors/gpencil/gpencil_edit.c
M       source/blender/editors/gpencil/gpencil_ops.c

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

diff --git a/source/blender/editors/gpencil/gpencil_edit.c 
b/source/blender/editors/gpencil/gpencil_edit.c
index 2926397be70..93e17f4ca44 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -131,8 +131,10 @@ static int gpencil_editmode_toggle_poll(bContext *C)
        return ED_gpencil_data_get_active(C) != NULL;
 }
 
-static int gpencil_editmode_toggle_exec(bContext *C, wmOperator *UNUSED(op))
+static int gpencil_editmode_toggle_exec(bContext *C, wmOperator *op)
 {
+       const int back = RNA_int_get(op->ptr, "back");
+
        WorkSpace *workspace = CTX_wm_workspace(C);
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bool is_object = false;
@@ -163,7 +165,7 @@ static int gpencil_editmode_toggle_exec(bContext *C, 
wmOperator *UNUSED(op))
 
        if (is_object) {
                /* try to back previous mode */
-               if ((ob->restore_mode) && ((gpd->flag & 
GP_DATA_STROKE_EDITMODE) == 0)) {
+               if ((ob->restore_mode) && ((gpd->flag & 
GP_DATA_STROKE_EDITMODE) == 0) && (back == 1)) {
                        mode = ob->restore_mode;
                }
                ob->restore_mode = ob->mode;
@@ -194,6 +196,8 @@ void GPENCIL_OT_editmode_toggle(wmOperatorType *ot)
        
        /* flags */
        ot->flag = OPTYPE_UNDO | OPTYPE_REGISTER;
+       /* properties */
+       RNA_def_int(ot->srna, "back", 0, 0, 1, "back", "1 to back previous 
mode", 0, 1);
 }
 
 /* Stroke Paint Mode Management */
@@ -208,8 +212,10 @@ static int gpencil_paintmode_toggle_poll(bContext *C)
        return ED_gpencil_data_get_active(C) != NULL;
 }
 
-static int gpencil_paintmode_toggle_exec(bContext *C, wmOperator *UNUSED(op))
+static int gpencil_paintmode_toggle_exec(bContext *C, wmOperator *op)
 {
+       const int back = RNA_int_get(op->ptr, "back");
+
        WorkSpace *workspace = CTX_wm_workspace(C);
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bool is_object = false;
@@ -236,7 +242,7 @@ static int gpencil_paintmode_toggle_exec(bContext *C, 
wmOperator *UNUSED(op))
 
        if (is_object) {
                /* try to back previous mode */
-               if ((ob->restore_mode) && ((gpd->flag & 
GP_DATA_STROKE_PAINTMODE) == 0)) {
+               if ((ob->restore_mode) && ((gpd->flag & 
GP_DATA_STROKE_PAINTMODE) == 0) && (back == 1)) {
                        mode = ob->restore_mode;
                }
                ob->restore_mode = ob->mode;
@@ -267,6 +273,8 @@ void GPENCIL_OT_paintmode_toggle(wmOperatorType *ot)
 
        /* flags */
        ot->flag = OPTYPE_UNDO | OPTYPE_REGISTER;
+       /* properties */
+       RNA_def_int(ot->srna, "back", 0, 0, 1, "back", "1 to back previous 
mode", 0, 1);
 }
 
 /* Stroke Scupt Mode Management */
@@ -281,8 +289,10 @@ static int gpencil_sculptmode_toggle_poll(bContext *C)
        return ED_gpencil_data_get_active(C) != NULL;
 }
 
-static int gpencil_sculptmode_toggle_exec(bContext *C, wmOperator *UNUSED(op))
+static int gpencil_sculptmode_toggle_exec(bContext *C, wmOperator *op)
 {
+       const int back = RNA_int_get(op->ptr, "back");
+
        WorkSpace *workspace = CTX_wm_workspace(C);
        bGPdata *gpd = ED_gpencil_data_get_active(C);
        bool is_object = false;
@@ -309,7 +319,7 @@ static int gpencil_sculptmode_toggle_exec(bContext *C, 
wmOperator *UNUSED(op))
 
        if (is_object) {
                /* try to back previous mode */
-               if ((ob->restore_mode) && ((gpd->flag & 
GP_DATA_STROKE_SCULPTMODE) == 0)) {
+               if ((ob->restore_mode) && ((gpd->flag & 
GP_DATA_STROKE_SCULPTMODE) == 0) && (back == 1)) {
                        mode = ob->restore_mode;
                }
                ob->restore_mode = ob->mode;
@@ -340,6 +350,8 @@ void GPENCIL_OT_sculptmode_toggle(wmOperatorType *ot)
 
        /* flags */
        ot->flag = OPTYPE_UNDO | OPTYPE_REGISTER;
+       /* properties */
+       RNA_def_int(ot->srna, "back", 0, 0, 1, "back", "1 to back previous 
mode", 0, 1);
 }
 
 /* ************************************************ */
diff --git a/source/blender/editors/gpencil/gpencil_ops.c 
b/source/blender/editors/gpencil/gpencil_ops.c
index fe924fa45fb..7c5d0072c97 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -236,8 +236,12 @@ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf)
        /* ----------------------------------------------- */
        
        /* Exit EditMode */
-       WM_keymap_add_item(keymap, "GPENCIL_OT_editmode_toggle", TABKEY, 
KM_PRESS, 0, 0);
-       
+       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_editmode_toggle", TABKEY, 
KM_PRESS, 0, 0);
+       RNA_int_set(kmi->ptr, "back", 0);
+
+       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_editmode_toggle", TABKEY, 
KM_PRESS, KM_CTRL, 0);
+       RNA_int_set(kmi->ptr, "back", 1);
+
        /* Brush Settings */
        /* NOTE: We cannot expose these in the standard keymap, as they will 
interfere with regular hotkeys
         *       in other modes. However, when we are dealing with Stroke Edit 
Mode, we know for certain
@@ -377,7 +381,11 @@ static void ed_keymap_gpencil_painting(wmKeyConfig 
*keyconf)
        RNA_boolean_set(kmi->ptr, "wait_for_input", false);
 
        /* Exit PaintMode */
-       WM_keymap_add_item(keymap, "GPENCIL_OT_paintmode_toggle", TABKEY, 
KM_PRESS, 0, 0);
+       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_paintmode_toggle", TABKEY, 
KM_PRESS, 0, 0);
+       RNA_int_set(kmi->ptr, "back", 0);
+
+       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_paintmode_toggle", TABKEY, 
KM_PRESS, KM_CTRL, 0);
+       RNA_int_set(kmi->ptr, "back", 1);
 
        /* Selection */
        ed_keymap_gpencil_selection(keymap);
@@ -420,8 +428,12 @@ static void ed_keymap_gpencil_sculpting(wmKeyConfig 
*keyconf)
        keymap->poll = gp_stroke_sculptmode_poll;
 
        /* Exit SculptMode */
-       WM_keymap_add_item(keymap, "GPENCIL_OT_sculptmode_toggle", TABKEY, 
KM_PRESS, 0, 0);
+       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_sculptmode_toggle", 
TABKEY, KM_PRESS, 0, 0);
+       RNA_int_set(kmi->ptr, "back", 0);
        
+       kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_sculptmode_toggle", 
TABKEY, KM_PRESS, KM_CTRL, 0);
+       RNA_int_set(kmi->ptr, "back", 1);
+
        /* Selection */
        ed_keymap_gpencil_selection(keymap);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to