UI: delay tool label tip display
[blender.git] / source / blender / editors / interface / interface_handlers.c
index 29ee6a72bb2d2d6d211415f8d6ef3dce84b3cfda..86c73b72620a21a22185327a3e93dc57fc628940 100644 (file)
@@ -7046,10 +7046,17 @@ void UI_but_tooltip_timer_remove(bContext *C, uiBut *but)
        }
 }
 
-static ARegion *ui_but_tooltip_init_ex(
-        bContext *C, ARegion *ar, bool *r_exit_on_event,
-        bool is_label)
+static ARegion *ui_but_tooltip_init(
+        bContext *C, ARegion *ar,
+        int *pass, double *r_pass_delay, bool *r_exit_on_event)
 {
+       bool is_label = false;
+       if (*pass == 1) {
+               is_label = true;
+               (*pass)--;
+               (*r_pass_delay) = UI_TOOLTIP_DELAY - UI_TOOLTIP_DELAY_LABEL;
+       }
+
        uiBut *but = UI_region_active_but_get(ar);
        *r_exit_on_event = false;
        if (but) {
@@ -7058,16 +7065,6 @@ static ARegion *ui_but_tooltip_init_ex(
        return NULL;
 }
 
-static ARegion *ui_but_tooltip_init(bContext *C, ARegion *ar, bool *r_exit_on_event)
-{
-       return ui_but_tooltip_init_ex(C, ar, r_exit_on_event, false);
-}
-
-static ARegion *ui_but_tooltip_init_label(bContext *C, ARegion *ar, bool *r_exit_on_event)
-{
-       return ui_but_tooltip_init_ex(C, ar, r_exit_on_event, true);
-}
-
 static void button_tooltip_timer_reset(bContext *C, uiBut *but)
 {
        wmWindowManager *wm = CTX_wm_manager(C);
@@ -7078,7 +7075,15 @@ static void button_tooltip_timer_reset(bContext *C, uiBut *but)
        if ((U.flag & USER_TOOLTIPS) || (data->tooltip_force)) {
                if (!but->block->tooltipdisabled) {
                        if (!wm->drags.first) {
-                               WM_tooltip_timer_init(C, data->window, data->region, ui_but_tooltip_init);
+                               bool is_label = UI_but_has_tooltip_label(but);
+                               double delay = is_label ? UI_TOOLTIP_DELAY_LABEL : UI_TOOLTIP_DELAY;
+                               WM_tooltip_timer_init_ex(C, data->window, data->region, ui_but_tooltip_init, delay);
+                               if (is_label) {
+                                       bScreen *sc = WM_window_get_active_screen(data->window);
+                                       if (sc->tool_tip) {
+                                               sc->tool_tip->pass = 1;
+                                       }
+                               }
                        }
                }
        }
@@ -7314,12 +7319,14 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA
                ui_numedit_set_active(but);
        }
 
+#if 0
        if (UI_but_has_tooltip_label(but)) {
                /* Show a label for this button. */
                WM_tooltip_immediate_init(
                        C, CTX_wm_window(C), ar,
-                       ui_but_tooltip_init_label);
+                       ui_but_tooltip_init);
        }
+#endif
 }
 
 static void button_activate_exit(