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/blender/editors/interface/interface_handlers.c | |
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/blender/editors/interface/interface_handlers.c')
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 13 |
1 files changed, 12 insertions, 1 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; |