[Bug 489077] New: YaST buttons clickable but may have no immediate effect
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsmeix@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c442475 Summary: YaST buttons clickable but may have no immediate effect Classification: openSUSE Product: openSUSE 11.2 Version: Factory Platform: All OS/Version: SuSE Other Status: NEW Severity: Enhancement Priority: P5 - None Component: Usability AssignedTo: mschmidkunz@novell.com ReportedBy: jsmeix@novell.com QAContact: qa@suse.de CC: kmachalkova@novell.com, alpha096@virginbroadband.com.au Found By: Development When a YaST module runs, then in the YaST user interface the buttons in the dialogs are usually always clickable (i.e. at any time the user can click a button) even when at the same time YaST is busy with something else so that YaST cannot immediately do what the click requests and in the end the user's click action has no immediate effect. After YaST had finished why it was busy while the user clicked, the click event will be actually processed so that the actual effect of the button click happens delayed. As far as I know this is just the normal behaviour of any usual application. For example when my web-browser (e.g. Firefox) is busy with downloading a huge amount of data or when it is busy with starting a helper application like the Adobe Reade to view a downloaded PDF there is no immediate effect whe I click a button in the web-browser's menue. Therefore the issue in YaST is no bug but nevertheless the usability feeling is bad so that I filed this enhancement request for the next openSUSE version so that we can find out how we could improve the situation. Here some bug reports where the issue becomes really annoying for the user: https://bugzilla.novell.com/show_bug.cgi?id=442173#c4 ------------------------------------------------------------------- clicking the [Abort] button has not the expected effect. One can click [Abort] but then one must wait all the time until the GUI has completed its job (i.e. until the list finally shows up) and afterwards the module is aborted just when the reason for the abort request is no longer valid. ------------------------------------------------------------------- bug #442475 ------------------------------------------------------------------- Cancel button ineffective while starting the module .. If a Yast Application stalls at any point, using the Cancel Button has NO effect on the Yast Application. .. IG ANY YAST Module hangs for any reason on completion of settings you have to wat for it to time out- Abort or Canceled are ignore ------------------------------------------------------------------- https://bugzilla.novell.com/show_bug.cgi?id=481299#c5 ------------------------------------------------------------------- no matter the cause - the user cannot terminate the process .. As a conventional user the only option now is to shut down/restart the PC ------------------------------------------------------------------- My current personal thoughts: Usually there is only one single process which is running. When this single process is busy with something else it cannot process what a button click requests. This is a limitation of the core operating system and we cannot do anything here on the YaST module level with reasoable effort - this means that it is impossible regarding the effort when each YaST module author would have to implement his module as a multi-process or multi-threaded thingy. The core operating system can immediately kill any process at any time by sending appropriate signals to the process. When a signal was sent to a process, the normal operation of the process is interrupted by the core operating system and the process is forced to act on the signal's request. To kill a process usually first SIGTERM is sent to it and if this doesn't have an effect SIGKILL is sent. Those signals can be usually sent by using the window controls of the window wherein the YaST module runs. For example I run fvwm2 as window manager and here I have for each window a dropdown menue with the entries "Delete" which sends SIGTERM so that where the YaST module can respond with a "Really Abort ?" popup dialog so that the YaST module can do some cleanup and terminate with a clean state "Destroy" which sends SIGKILL where the YaST module cannot respond at all because the core operating system will immediately kill the process regardless what the state is afterwards On the other hand the "Cancel/Abort" button in a YaST module does not send a signal to the YaST module process so that its normal operation is not interrupted - instead the "Cancel/Abort" buttons are just normal buttons where a button click is processed when normal operation allows to react on button clicks. This behaviour is intentional because the meaning of the "Cancel/Abort" button in a YaST module is not to kill it but to request for normal termination exactly like the "Quit/Exit" buttons in any other application. We might discuss if it makes sense to have an additional "Kill" button in the dialogs of YaST modules which does send a SIGTERM but do other applications have it? Or should we also in YaST simply rely on the window manager (or on [Ctrl]+[C] via keyboard) to send kill signals? Back to the initial issue in this bug: As far as I see the root cause of user annoyance is that for the user it is not clear when a button click has no immediate effect (because the process is buys otherwise). I think this can be improved by providing better feedback to the user what is going on behind the surface. Some suggestions: a) Gay out the buttons when the process cannot respond to them immendiately? I think this cannot be implemented correctly because then also for any stort-time action of the process the buttons would be grayed off and on all the time (i.e. results some kind of button flickering). b) Change the graphical representation of the button after it was clicked so that the user can see that his click request was noticed. Usually when the process is busy otherwise the cursor is changed to a busy-cursor so that both the busy-cursor together with the clicked-button shows the user what is actually going on. As far as I see the graphical representation of the button already changes after it was clicked but the effect is so minimal that I didn't noticed it up to now. c) When when the process is busy with something where the autor of the YaST module knows that it can be time-consuming, he would like to show a busy popup notification. But here the problem is the word "can" - i.e. the autor of the YaST module only knows that it may be time-consuming under whatever circumstances which are beyond his control (e.g. when re-starting a service). Therefore he does not want to show a busy popup notification in any case because when it is not time-consuming there would be a flickering popup (appear and disappear almost at the same time). Currently my personal workaround to avoid the flickering is that when I show a busy popup where I don't know for sure it is time-consuming I do an additional "sleep 1 second" so that the busy popup stays at least for one second. d) When when the process is busy with something where the author of the YaST module does not know that it can be time-consuming (e.g. in bug #442173), the underlying YaST system (e.g. the YaST UI) might be able to provide better feedback than just the busy-cursor? -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User mschmidkunz@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c1 Martin Schmidkunz <mschmidkunz@novell.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |NEEDINFO Info Provider| |jsrain@novell.com --- Comment #1 from Martin Schmidkunz <mschmidkunz@novell.com> 2009-03-27 09:26:36 MST ---
We might discuss if it makes sense to have an additional "Kill" button in the dialogs of YaST modules which does send a SIGTERM but do other applications have it?
Definitly not. There is enough confusion about this "Cancel"/"Abort" topic. In some cases the user is already informed if the process takes a longer time (printer detection, scanner detection). I would be really careful about introducing busy pop ups which might annoy people or confuse people (change graphical representation of a button). IMHO buttons should be only shown when they are enabled and their action has an effect. Buttons maybe shown in a disabled state if there is a possibility to enable them in the same dialog. Sorry, I can't be of more help. Maybe there is a more technical solution to this topic? Jiri, do you know, whom to address? -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsrain@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c2 Jiri Srain <jsrain@novell.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEEDINFO |NEW CC| |jsrain@novell.com Info Provider|jsrain@novell.com | --- Comment #2 from Jiri Srain <jsrain@novell.com> 2009-03-30 02:28:24 MDT --- I'm not sure, which is the right solution. Looking at suggestions above: a) is not a way to go; there are operations which can be interrupted at some point (but not immediately); graying out such button would remove the chance of interrupting such operations. If an operation cannot be interrupted at all, graying out the button is an option, but this can only be done on per-case basis. b) can be done by the maintainers of individual UIs. If there already is some change in the button representation (I have not noticed), it might be quite simple c) would work only if you know how much time an operation can take - and does not solve operations which can be interrupted at some points. Flickerking pop-ups are not a prefered way d) better feedback may be an option, but don't know how to best represent being busy -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsmeix@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c3 Johannes Meixner <jsmeix@novell.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jw@novell.com --- Comment #3 from Johannes Meixner <jsmeix@novell.com> 2009-03-31 02:30:06 MDT --- Martin, you wrote that "buttons should be only shown when they are enabled and their action has an effect". This is what I suggested under (a). What exactly do you mean with "has an effect"? Is an arbitrary delay o.k. as long as an effect happens at all? Is then the behaviour in https://bugzilla.novell.com/show_bug.cgi?id=442173#c4 acceptable? I explained that currently "buttons are shown even when their action does not have an effect within a reasonable response time". Above I wrote "immediately" but actually I meant "within a reasonable response time". Martin, I think "Buttons maybe shown in a disabled state if there is a possibility to enable them in the same dialog" looks a bit nonsense. I wonder why have a button [Foo] disabled and have the possibility to enable it e.g. after [Bar] was done? Why not have [Foo] enabled in any case and if clicked show a feedback popup that e.g. first [Bar] must be done before [Foo] can have the actually desired effect? As far as I can imagine at the moment the only case when buttons are disabled is when there are mutually exclusive things like one button [paint it black] and another button [paint it white] (after clicking one it gets disabled and the other one gets enabled) but for such cases one would usually better use radio buttons. Jiri, regarding (a) "operations which can be interrupted": Obviously an [Interrupt] button (whatever it is actually called) would not be grayed out if the process can respond to it (within a reasonable response time). I meant it the other way round: If the process is doing an operation which can be interrupted usually all other buttons except the [Interrupt] button might be grayed out (as long as all other buttons have no effect). Is it possible to have a function to gray out all current active buttons in the current dialog except a list of interrupt buttons like Wizard::DisableAllButtons( [ `id(`one_interrupt_button), `id(`another_interrupt_button) ] ) and a function Wizard::RestoreAllButtons() to restore the buttons to their actual state before DisableAllButtons was called (i.e. a button which was already disabled before would stay disabled afterwards)? Currently the problem is that it is complicated to know which buttons currently exist and in which state (one would have to mainain very carefully a list of button IDs and state manually) whenever the content of a dialog is changed anywhere. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsmeix@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c4 --- Comment #4 from Johannes Meixner <jsmeix@novell.com> 2009-03-31 03:04:16 MDT --- I think the issue is not only regarding explicite "button" widgets. Actually it belongs to any widget where a click has an effect e.g. radio buttons, combo boxes, items in trees, and even widgets like `Table( `opt(`notify, `immediate) ...) Therefore I would like to ask for gereral UI functions like UI::DisableAllWidgets( [ `id(`interrupt_button), `id(`notify_immediate_table) ] ) and UI::RestoreAllWidgets() Is it possible with reasonable effort to implement such functions? -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 Johannes Meixner <jsmeix@novell.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |NEEDINFO Info Provider| |kmachalkova@novell.com -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jw@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c5 --- Comment #5 from Juergen Weigert <jw@novell.com> 2009-03-31 07:35:16 MDT --- We have a conceptional confusion here. I) From a usabiltiy perspective, a button which is enabled, should work. Immediatly and reliably. II) From a software architecture view, user interaction (which includes buttons) only happens when the program is in its main loop (or whereever the call to XNextEvent() is done). To implement I) faithfully, the best trick is: III) Avoid anything that takes any significant amount of time in the process that controls the UI. If we cannot guarantee III) our user experience may deteriorate. Trying to work around with explicit interrupts is the wrong approach. Any button should behave as if it were an interrupt. (Having II) and III) is a polling mechanism, giving a user experience very similar to real interupts) This forces us into seperate processes, one for implementing III) and another one for all potentially longer operation. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsmeix@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c6 --- Comment #6 from Johannes Meixner <jsmeix@novell.com> 2009-03-31 09:02:16 MDT --- FYI: While I talked to Martin I had the idea that one single status line where status/log messages appear continuously may help so much here - at least to indicate whether or not YaST is busy or has hang up. Just like a browser (at least my Firefox) does it: At the bottom it shows whatever funny status messages full of "technical nonsense" but the actual text does usually not matter at all for the user - all what matters is whether or not the status line continuously changes which indicates that the thingy is busy. And in case of a bug (e.g. a hangup) the status line is very useful because the user can report what it shows which may help us to find the root cause much faster. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User mschmidkunz@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c7 --- Comment #7 from Martin Schmidkunz <mschmidkunz@novell.com> 2009-04-01 07:42:16 MDT --- Another possible idea would be to introduce a button calles "Status" or "Log" (or something) which could be located next to "Help". The user would be able to get some information about background processes and in case of problems it might help developers/support people to get saner bug reports. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jw@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c8 --- Comment #8 from Juergen Weigert <jw@novell.com> 2009-04-01 07:55:12 MDT --- Martin, this is a brilliant idea. It is least intrusive for th developers and very helpful to the user. This could work like an xtail or tail -f on the logfiles. The lower part of a stack backtrace could also be helpful. Not that the exact function calls or log-lines would be meaningful to the user, but as Johannes pointed out earlier, the frequency at which these things change (or not change) is meaningful. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User kmachalkova@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c9 Katarina Machalkova <kmachalkova@novell.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEEDINFO |NEW Info Provider|kmachalkova@novell.com | --- Comment #9 from Katarina Machalkova <kmachalkova@novell.com> 2009-04-01 08:08:56 MDT ---
Therefore I would like to ask for gereral UI functions like UI::DisableAllWidgets( [ `id(`interrupt_button), `id(`notify_immediate_table) ] ) and UI::RestoreAllWidgets()
Is it possible with reasonable effort to implement such functions?
Technically, of course it is possible and not that complicated. But the same can be achieved the same by invoking a busy-popup dialog before the time-consuming operation and closing it afterwards, now doesn't it? The busy pop-up is a modal dialog, thus user can't click around in underlying main dialog just as well ... or am I missing something? -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsmeix@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c10 --- Comment #10 from Johannes Meixner <jsmeix@novell.com> 2009-04-01 08:52:28 MDT --- Regarding a "Status/Log" button: We would have here the same problem as the bug describes. How to make sure that at least this one button responds immediately in any case? We would need an interrupt/signal-like solution at least for this one button together with an interrupt/signal handler function to make sure the status/log window pops up in any case. This is the reason why I proposed a status line which exists by default e.g. in each Wizard dialog where by default simply each line is shown which goes also into /var/log/YaST2/y2log. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
https://bugzilla.novell.com/show_bug.cgi?id=489077 User jsmeix@novell.com added comment https://bugzilla.novell.com/show_bug.cgi?id=489077#c11 --- Comment #11 from Johannes Meixner <jsmeix@novell.com> 2009-04-01 09:00:28 MDT --- Probably better a status line where by default only YaST2 log-lines with "[YCP]" are shown to avoid too much useless "technical nonsense"? -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.
participants (1)
-
bugzilla_noreply@novell.com