diff options
author | Ton Roosendaal <ton@blender.org> | 2013-06-07 19:42:26 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2013-06-07 19:42:26 +0400 |
commit | c24be7ec6e5269c54552d1fb03707b97befd48d1 (patch) | |
tree | 0b3a034e62b39ab9d97021288dc0572e06eb21d9 /source | |
parent | a604fb730dd62a2730a3a753adc057abb93296cb (diff) |
Usablity:
Textbuttons: double click now selects entire words (like on file path segements)
Triple click was requested too, but that's not a WM event type yet.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 13 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 4 |
2 files changed, 14 insertions, 3 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5ca22a3419e..0d8c11c0036 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -2192,11 +2192,14 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle break; case LEFTMOUSE: { + bool had_selection = but->selsta != but->selend; + /* exit on LMB only on RELEASE for searchbox, to mimic other popups, and allow multiple menu levels */ if (data->searchbox) inbox = ui_searchbox_inside(data->searchbox, event->x, event->y); - if (event->val == KM_PRESS) { + /* for double click: we do a press again for when you first click on button (selects all text, no cursor pos) */ + if (event->val == KM_PRESS || event->val == KM_DBL_CLICK) { mx = event->x; my = event->y; ui_window_to_block(data->region, block, &mx, &my); @@ -2217,6 +2220,14 @@ static void ui_do_but_textedit(bContext *C, uiBlock *block, uiBut *but, uiHandle retval = WM_UI_HANDLER_BREAK; } } + + /* only select a word in button if there was no selection before */ + if (event->val == KM_DBL_CLICK && had_selection == false) { + ui_textedit_move(but, data, STRCUR_DIR_PREV, 0, STRCUR_JUMP_DELIM); + ui_textedit_move(but, data, STRCUR_DIR_NEXT, true, STRCUR_JUMP_DELIM); + retval = WM_UI_HANDLER_BREAK; + changed = true; + } else if (inbox) { button_activate_state(C, but, BUTTON_STATE_EXIT); retval = WM_UI_HANDLER_BREAK; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index de961afefd8..ac714b09bb0 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -380,8 +380,8 @@ static int wm_handler_ui_call(bContext *C, wmEventHandler *handler, wmEvent *eve int retval; /* UI code doesn't handle return values - it just always returns break. - * to make the DBL_CLICK conversion work, we just don't send this to UI */ - if (event->val == KM_DBL_CLICK) + * to make the DBL_CLICK conversion work, we just don't send this to UI, except mouse clicks */ + if (event->type != LEFTMOUSE && event->val == KM_DBL_CLICK) return WM_HANDLER_CONTINUE; /* UI is quite aggressive with swallowing events, like scrollwheel */ |