Missing info: > - Stolen from Gimp (blame venomgfx for hint!): ScrollWheel allows > to go over menu items and use number buttons, only on mouse-over.
It is ALT+Scrollwheel. Keymap entries for UI is a future issue btw... -Ton- ------------------------------------------------------------------------ Ton Roosendaal Blender Foundation [email protected] www.blender.org Blender Institute Entrepotdok 57A 1018AD Amsterdam The Netherlands On 6 Jun, 2009, at 15:35, Ton Roosendaal wrote: > Revision: 20678 > > http://projects.blender.org/plugins/scmsvn/viewcvs.php? > view=rev&root=bf-blender&revision=20678 > Author: ton > Date: 2009-06-06 15:35:04 +0200 (Sat, 06 Jun 2009) > > Log Message: > ----------- > 2.5 > > Several usablity tweaks: > > - Search menu allows ScrollWheel to view items > > - Tooltip on button on bottom of window showed wrong > - Tooltips were popping up while draggin (MMB) or scrolling > (wheel). Now they stay away. > > - Stolen from Gimp (blame venomgfx for hint!): ScrollWheel allows > to go over menu items and use number buttons, only on mouse-over. > > Note for devs: the WM_event_add_mousemove() call (to add a fake > event to bring UI back alive after view changes) now works much > more reliably. It ensures the mouse move is only handled after all > notifiers/redraws were done. > > Modified Paths: > -------------- > > branches/blender2.5/blender/source/blender/editors/interface/ > interface_handlers.c > > branches/blender2.5/blender/source/blender/editors/interface/ > interface_intern.h > > branches/blender2.5/blender/source/blender/editors/interface/ > interface_regions.c > > branches/blender2.5/blender/source/blender/editors/screen/ > screen_edit.c > > branches/blender2.5/blender/source/blender/makesdna/ > DNA_windowmanager_types.h > > branches/blender2.5/blender/source/blender/windowmanager/intern/ > wm_event_system.c > > Modified: > branches/blender2.5/blender/source/blender/editors/interface/ > interface_handlers.c > =================================================================== > --- > branches/blender2.5/blender/source/blender/editors/interface/ > interface_handlers.c 2009-06-06 13:24:06 UTC (rev 20677) > +++ > branches/blender2.5/blender/source/blender/editors/interface/ > interface_handlers.c 2009-06-06 13:35:04 UTC (rev 20678) > @@ -1245,6 +1245,8 @@ > int mx, my, changed= 0, inbox=0, retval= WM_UI_HANDLER_CONTINUE; > > switch(event->type) { > + case WHEELUPMOUSE: > + case WHEELDOWNMOUSE: > case MOUSEMOVE: > if(data->searchbox) > ui_searchbox_event(C, data->searchbox, but, > event); > @@ -1760,7 +1762,16 @@ > ui_window_to_block(data->region, block, &mx, &my); > > if(data->state == BUTTON_STATE_HIGHLIGHT) { > - if(event->val==KM_PRESS) { > + /* XXX hardcoded keymap check.... */ > + if(event->type == WHEELDOWNMOUSE && event->alt) { > + mx= but->x1; > + click= 1; > + } > + else if(event->type == WHEELUPMOUSE && event->alt) { > + mx= but->x2; > + click= 1; > + } > + else if(event->val==KM_PRESS) { > if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && > event->shift) { > button_activate_state(C, but, > BUTTON_STATE_TEXT_EDITING); > retval= WM_UI_HANDLER_BREAK; > @@ -1774,6 +1785,7 @@ > else if(ELEM(event->type, PADENTER, RETKEY) && > event->val==KM_PRESS) > click= 1; > } > + > } > else if(data->state == BUTTON_STATE_NUM_EDITING) { > if(event->type == ESCKEY) { > @@ -1961,7 +1973,16 @@ > ui_window_to_block(data->region, block, &mx, &my); > > if(data->state == BUTTON_STATE_HIGHLIGHT) { > - if(event->val==KM_PRESS) { > + /* XXX hardcoded keymap check.... */ > + if(event->type == WHEELDOWNMOUSE && event->alt) { > + mx= but->x1; > + click= 2; > + } > + else if(event->type == WHEELUPMOUSE && event->alt) { > + mx= but->x2; > + click= 2; > + } > + else if(event->val==KM_PRESS) { > if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && > event->shift) { > button_activate_state(C, but, > BUTTON_STATE_TEXT_EDITING); > retval= WM_UI_HANDLER_BREAK; > @@ -2004,7 +2025,7 @@ > } > > if(click) { > - if (event->ctrl) { > + if (event->ctrl || click==2) { > /* nudge slider to the left or right */ > float f, tempf, softmin, softmax, softrange; > int temp; > @@ -2062,6 +2083,21 @@ > button_activate_state(C, but, BUTTON_STATE_MENU_OPEN); > return WM_UI_HANDLER_BREAK; > } > + else if(ELEM3(but->type, MENU, ICONROW, ICONTEXTROW)) { > + > + if(event->type == WHEELDOWNMOUSE && event->alt) { > + data->value= ui_step_name_menu(but, -1); > + button_activate_state(C, but, > BUTTON_STATE_EXIT); > + ui_apply_button(C, but->block, but, data, 1); > + return WM_UI_HANDLER_BREAK; > + } > + else if(event->type == WHEELUPMOUSE && event->alt) { > + data->value= ui_step_name_menu(but, 1); > + button_activate_state(C, but, > BUTTON_STATE_EXIT); > + ui_apply_button(C, but->block, but, data, 1); > + return WM_UI_HANDLER_BREAK; > + } > + } > } > > return WM_UI_HANDLER_CONTINUE; > @@ -3232,6 +3268,7 @@ > > if(data->state == BUTTON_STATE_HIGHLIGHT) { > switch(event->type) { > + > case MOUSEMOVE: > /* verify if we are still over the button, if > not exit */ > if(!ui_mouse_inside_button(ar, but, event->x, > event->y)) { > @@ -3265,6 +3302,15 @@ > > retval= WM_UI_HANDLER_CONTINUE; > break; > + case WHEELUPMOUSE: > + case WHEELDOWNMOUSE: > + case MIDDLEMOUSE: > + /* XXX hardcoded keymap check... but anyway, > while view changes, > tooltips should be removed */ > + if(data->tooltiptimer) { > + > WM_event_remove_window_timer(data->window, data->tooltiptimer); > + data->tooltiptimer= NULL; > + } > + /* pass on purposedly */ > default: > /* handle button type specific events */ > retval= ui_do_button(C, block, but, event); > > Modified: > branches/blender2.5/blender/source/blender/editors/interface/ > interface_intern.h > =================================================================== > --- > branches/blender2.5/blender/source/blender/editors/interface/ > interface_intern.h 2009-06-06 13:24:06 UTC (rev 20677) > +++ > branches/blender2.5/blender/source/blender/editors/interface/ > interface_intern.h 2009-06-06 13:35:04 UTC (rev 20678) > @@ -371,6 +371,7 @@ > void ui_popup_block_free(struct bContext *C, uiPopupBlockHandle > *handle); > > void ui_set_name_menu(uiBut *but, int value); > +int ui_step_name_menu(uiBut *but, int step); > > struct AutoComplete; > struct AutoComplete *autocomplete_begin(char *startname, int maxlen); > > Modified: > branches/blender2.5/blender/source/blender/editors/interface/ > interface_regions.c > =================================================================== > --- > branches/blender2.5/blender/source/blender/editors/interface/ > interface_regions.c 2009-06-06 13:24:06 UTC (rev 20677) > +++ > branches/blender2.5/blender/source/blender/editors/interface/ > interface_regions.c 2009-06-06 13:35:04 UTC (rev 20678) > @@ -225,6 +225,44 @@ > menudata_free(md); > } > > +int ui_step_name_menu(uiBut *but, int step) > +{ > + MenuData *md; > + int value= ui_get_but_val(but); > + int i; > + > + md= decompose_menu_string(but->str); > + for (i=0; i<md->nitems; i++) > + if (md->items[i].retval==value) > + break; > + > + if(step==1) { > + /* skip separators */ > + for(; i<md->nitems-1; i++) { > + if(md->items[i+1].retval != -1) { > + value= md->items[i+1].retval; > + break; > + } > + } > + } > + else { > + if(i>0) { > + /* skip separators */ > + for(; i>0; i--) { > + if(md->items[i-1].retval != -1) { > + value= md->items[i-1].retval; > + break; > + } > + } > + } > + } > + > + menudata_free(md); > + > + return value; > +} > + > + > /******************** Creating Temporary regions ******************/ > > ARegion *ui_add_temporary_region(bScreen *sc) > @@ -354,8 +392,8 @@ > } > } > if(y1 < 0) { > - y1 += 36; > - y2 += 36; > + y1 += 56*aspect; > + y2 += 56*aspect; > } > > /* widget rect, in region coords */ > @@ -506,9 +544,11 @@ > uiSearchboxData *data= ar->regiondata; > > switch(event->type) { > + case WHEELUPMOUSE: > case UPARROWKEY: > ui_searchbox_select(C, ar, but, -1); > break; > + case WHEELDOWNMOUSE: > case DOWNARROWKEY: > ui_searchbox_select(C, ar, but, 1); > break; > > Modified: > branches/blender2.5/blender/source/blender/editors/screen/ > screen_edit.c > =================================================================== > --- > branches/blender2.5/blender/source/blender/editors/screen/ > screen_edit.c 2009-06-06 13:24:06 UTC (rev 20677) > +++ > branches/blender2.5/blender/source/blender/editors/screen/ > screen_edit.c 2009-06-06 13:35:04 UTC (rev 20678) > @@ -1283,6 +1283,9 @@ > > ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C)); > WM_event_add_notifier(C, NC_WINDOW, NULL); > + > + /* makes button hilites work */ > + WM_event_add_mousemove(C); > } > } > > > Modified: > branches/blender2.5/blender/source/blender/makesdna/ > DNA_windowmanager_types.h > =================================================================== > --- > branches/blender2.5/blender/source/blender/makesdna/ > DNA_windowmanager_types.h 2009-06-06 13:24:06 UTC (rev 20677) > +++ > branches/blender2.5/blender/source/blender/makesdna/ > DNA_windowmanager_types.h 2009-06-06 13:35:04 UTC (rev 20678) > @@ -97,7 +97,7 @@ > short active; /* set to 1 if an active window, for quick > rejects */ > short cursor; /* current mouse cursor type */ > short lastcursor; /* for temp waitcursor */ > - short pad2; > + short addmousemove; /* internal: tag this for extra mousemove > event, > makes cursors/buttons active on UI switching */ > int pad3; > > struct wmEvent *eventstate; /* storage for event system */ > > Modified: > branches/blender2.5/blender/source/blender/windowmanager/intern/ > wm_event_system.c > =================================================================== > --- > branches/blender2.5/blender/source/blender/windowmanager/intern/ > wm_event_system.c 2009-06-06 13:24:06 UTC (rev 20677) > +++ > branches/blender2.5/blender/source/blender/windowmanager/intern/ > wm_event_system.c 2009-06-06 13:35:04 UTC (rev 20678) > @@ -1088,6 +1088,17 @@ > wm_event_free(event); > > } > + > + /* only add mousemove when queue was read entirely */ > + if(win->addmousemove) { > + wmEvent event= *(win->eventstate); > + event.type= MOUSEMOVE; > + event.prevx= event.x; > + event.prevy= event.y; > + wm_event_add(win, &event); > + win->addmousemove= 0; > + } > + > CTX_wm_window_set(C, NULL); > } > } > @@ -1238,11 +1249,8 @@ > void WM_event_add_mousemove(bContext *C) > { > wmWindow *window= CTX_wm_window(C); > - wmEvent event= *(window->eventstate); > - event.type= MOUSEMOVE; > - event.prevx= event.x; > - event.prevy= event.y; > - wm_event_add(window, &event); > + > + window->addmousemove= 1; > } > > /* for modal callbacks, check configuration for how to interpret exit > with tweaks */ > > > _______________________________________________ > Bf-blender-cvs mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-blender-cvs > _______________________________________________ Bf-blender-cvs mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-blender-cvs
