##(see the SpecSpec for an explanation) ''Based on a post into the ubuntu forums, it has occurred to me that a fifth mousetweak could be added to the already existing 4 mousetweaks. As the 4 original mousetweaks are already under development, it might be better to write the new mousetweak into a page of its own.'' == Summary == This fifth mousetweak will offer users a way to simulate the 4 click types by doing only simple clicks. We might call it '''Single Click''' in analogy to the names of the other features of mousetweaks. == Release Note == This new mousetweak represents an additional function that should be added to the already existing 4 mousetweaks. == Rationale == The mousetweaks already offer dwelling, so that users that are not able to do clicks with hardware devices are able to simulate clicks with software. But what about users that would be able to push a button, but do not have the dexterity to do a proper left click, double click, right click or drag&drop? This mousetweak will offer these users a way to simulate the 4 click types by only doing simple clicks. == Use Cases == * Jane is able to do button clicks, but has problems to keep the button pressed when she wants to do drag and drops. She would be grateful if she could start the drag and drop with a single click and terminate it with a second single click. * William has problems to do proper clicks: sometimes his clicks are to long, sometimes they are followed by an unwillful click,... He would appreciate if there was software that would catch his unperfect clicks and translate them into proper left clicks, double clicks, right clicks and drag&drops. == Assumptions == == Design == In the following, we will call 'software click', a click generate by the single click function. Please, have a look at the following sample GUI of the preferences of the single click function: {{attachment:mousetweaksSingleClickPreferences.png}} The user can active the single click fonctionality by enabling the correspondent checkbox. * It does not make sense to enable the single click fonctionality when the dwell click or the delay click are running. Consequently, the activation routine will have to warn the user that the activation of the single click will disable the dwell click and the delay click; it should also ask for confirmation. The user has 2 ways to indicate to the single click fonctionality if the software has to transform his next click into a left click, double click, drag click or right: * a floating resizeble window with 4 buttons (one for each click type) that the user can move and resize on the desktop; let us call it click type window (ctw) * an applet on the panel that shows 4 buttons, for users that do not want to cover the screenspace with the ctw; let us call it the click type applet (cta) The ctw and cta have to be always synchronized when both are simultaneously open. In other words, if the user selects a click type in the ctw, the same click type will automatically be selected in the cta; and vice versa. In the preferences, there are two radio buttons to indicate to the single click function whether the buttondown or the buttonup of the user's click will trigger the software click. This way, the user can choose the way that is more appropriate to his skills. Moreover, when the single click function is waiting for a user input (this is not always the case: see below the setting that makes the single click function only work when a click type is selected in the ctw or cta), it does not distinguish between the button1, button2 and button3. In fact, there is no need to distinguish between the different buttons, as only one type of input is required. Consequently, any of the 3 buttons can be used by the user for his click; the single click function treats them in the same manner. If a click type is selected in the ctw or cta, the user's click will generate the selected software click at the location of the user's mousedown. More precisely: * software left click: The user's click will generate a software left click at the location of the user's mousedown * software double click: The user's click will generate a software double click at the location of the user's mousedown * software drag click: This needs two clicks from the user; one to start the drag, the second to end the drag. Indeed, the user's first click will generate a software left buttondown with the coordinates of the user's buttondown; the state of the software left button remains to down until the user clicks for a second time: so the user has all the time that he wants to drag the item around as long as he does not click for a second time; the user's second click ends the software left buttondown state by generating the correspondent software left buttonup with the same coordinates as the buttondown of the user's second click. * software right click: The user's click generates a software right click with the user's buttondown coordinates. (This ends the simulated right click; but it does not end the selection of a contextual menu item, which is not part of the simulated right click; it is done by the following left click). Some users need the single click function only to generate certain types of click; others will need it for every click. The preferences of the single click function offers two radio buttons, where the user has to indicate in which of these two modes he wants the single click function to work: * If the user chooses that the single click function has to generate clicks only if a click type is selected, the function will behave like this: * As long as the user does not select a click type in the ctw or cta, the single click function does not interfere. * If the user selects a click type in the ctw or cta, the next click (or next two clicks if drag click has been selected) of the user will cause the single click function to generate the selected click type. Right after the generation of the click, the single click function will automatically deselect all click types in the ctw and cta. * If the user selects a click type and changes his mind before he has performed any click, he can unselect it again by clicking another time on the correspondent button in the ctw or cta. * If the user chooses that he wants the single click function to consider all the user's clicks as input for the single click function, the single click function will behave like this: * Every click that the user performs will be interpreted by the single click function. * After the generation of each software click (except those in the ctw and cta), the single click function will automatically select the left click type in the ctw and cta. This can be seen as an 'automatically select left click type' and ensures that every click will be interpreted by the single click function. * There is a slider to tell the single click function to ignore subsequent user's clicks for a certain delay after he has performed a click. * If the single click function is used in the mode to only interfere when a click type is selected, this slider is greyed and does not have any effect. It would not make sense to allow the 'ignore clicks fonctionality' in this case because it would hinder the user to do direct double clicks when no click type is selected. And making the 'ignore clicks fonctionality' only work when the user selects a click type would be confusing, because the fonctionality would not always behave in the same way. * In the always interprete mode of the single click function, the slider is used to indicate how long the ignore delay has to last. == Implementation == === UI Changes === === Code Changes === === Migration === == Test/Demo Plan == == Outstanding Issues == == BoF agenda and discussion == ---- CategorySpec