Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2013-06-07 19:42:26 +0400
committerTon Roosendaal <ton@blender.org>2013-06-07 19:42:26 +0400
commitc24be7ec6e5269c54552d1fb03707b97befd48d1 (patch)
tree0b3a034e62b39ab9d97021288dc0572e06eb21d9
parenta604fb730dd62a2730a3a753adc057abb93296cb (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.
-rw-r--r--source/blender/editors/interface/interface_handlers.c13
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c4
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 */