GNOME Bugzilla – Bug 402528
Offer option to disable scroll wheel on task list
Last modified: 2020-11-07 12:14:53 UTC
That feature request has been opened on https://launchpad.net/ubuntu/+source/gnome-panel/+bug/39328 "On a laptop track pad, it's really easy to accidentially use the "scrolling goes through windows" feature of the new g-p. I believe this would warrent disabling the functionality (maybe only if a trackpad is detected? is this doable?) or at least offering an option to do so. ...3
Reassigning a few bugs from the panel/windowlist to the libwnck/tasklist.
I confirm that I have major usability problems with scroll-over-window-list-applet behaviour. == Usage pattern and the problem == I am a synaptics touchpad user. Its right part works for vertical scrolling when moving the finger up-down, and its bottom line works for horisontal scrolling when moving the finger left-right. I find this useful and convenient in most applications (including GNOME ones). However, it is very difficult to use window list applet for touchpad users. I have the window list in the bottom. To bring up a different window I move the pointer down (sliding the finger tip down on the touchpad), move the pointer over the window list to find the window I need (slide the finger left of right on the touchpad), click lightly, and then move the pointer back to the window (slide the finger up). So, the finger moves: down, right or left, up. If, for some reason, I even slightly touched the scrolling area on the touchpad (it is likely, because I have to move the pointer over the window list, and the scrolling area is closer for a right-handed person), then the applet does an instant flickering through all the open windows on the workspace. == Why this is counter intuitive == I find this behaviour counter-intuitive for a number of reasons: 1) in most applications scrolling results in _gradual_ changes to the object on the screen (line-by-line text scrolling, image scrolling, smooth zooming, rotating) or changes to continuous parameter (like volume change); in window list applet even light touch to the scrolling area results in drastic change of the screen, and, what's more important, this change is not predictable because the user does not percieve the windows on the screen as a lineary arranged sequence; The only exception to this usage pattern of the scrolling I know is scroll wheel binding in FPS games, where it is used to quickly switch weapons, but in those games the scroll wheel behaves consistently throughout the game! 2) for a touchpad user it hardly possible to avoid this accidental scrolling over the window list (see the usage pattern above, the user ofen _needs_ to move the finger close to the scrolling zone), and if this scrolling happens, the user is absolutely disoriented, because likely he wont see neither the window that was open before, nor the window he intended to bring up, and it is not easy to restore the previous state of the screen (especially when there is a lot of windows) 3) window list is a _visual_ point-and-click type of control: the user sees the title of the window he needs, points the pointer and clicks to bring it up, accidental brining up of the window next to the one the user clicked is _not_ an intuitive behaviour; this is different from sequential controls like Alt-TAB: I would really expect to be able to scroll when I press it and keep the Alt pressed, as I see the sequence and want to move through the sequence. In fact, I use Alt-TAB when I want to switch through the list of windows, and window list when I already see the title of the window I need, no need to scroll through. 4) in most applications reversed scrolling restores the state (the text is scrolled back, the volume changes in opposite direction etc.); this is not the case how the scroll wheel behaves over the window list pattern: Let say I have windows A, B, and C. Let see how changes their z-order. Initially: A(topmost)-B-C; After one scroll-step "down": B-A-C After two scroll-steps "down": C-B-A After two scroll-steps "down" and one scroll-step "up": B-C-A We see, that scrolling back does not restore the previous state (B-A-C)! == My proposals == I, personally, think that scrolling over a window list to switch windows is not a very good idea. Yet I see that it does not bother real mouse users much. It is touchpad user which suffer most. So, I suggest to do at least on of the following: A) Add an option to to disable scrolling over the window list (at least in gconf) B) Reduce scrolling sensitivity for window switching (probably this would reduce number of accidental scrolling for touchpad users) C) Add a delay of mouse-over-the-window-list after which the scrolling enables D) Implement scrollwheel-switching in Alt-Tab instead of window list E) Make scrolling over the window list appear "slow" (probably some kind of effect to switch between the windows, to be able to see switching) and reversable F) Disable scrolling over the window list completely (I described above why I see it as a bad interface idea).
I too am using a synaptics touchpad. jetxee's summary describes my problem. This is preventing me from using the Window List at all. I don't have the kind of fine dexterity that is required in my hands. I have to use Alt-Tab to switch apps. I would suggest adding a configuration option in the Windows List Preferences. That's where I would expect someone to look for it.
I agree with the others. It is really annoying to try to switch over to Thunderbird or something and instead get a spastic window dance. (Note that this problem is exacerbated by Metacity's anti-focusing behavior such that opening a link in email doesn't raise the Firefox window and vice versa for mailto links. The result is that I need to manually switch windows more often which makes the window list problem more frustrating.) Please find a way to provide an option to disable this behavior! Thanks! -John.
*** Bug 504361 has been marked as a duplicate of this bug. ***
Isn't there at least some gconf entry for this? I suppose that wouldn't be the ideal fix, but it would be a nice workaround. The current behavior is really annoying for me when working with a touchpad and having vertical scrolling enabled. Just being able to disable this feature (without recompiling :) would be a great help.
This has been a long time grievance, and it is disheartening to see complete lack of visibility (and maybe interest). Is there any way to elevate this, or give more visibility, sometimes this bug makes me want to start pulling my hairs out in the middle of serious work. Like Oliver said, something as simple as a gconf entry would be of great value to many many pained users.
It's totally visible to the libwnck developers. The only way to elevate this is to provide a patch -- it's all a matter of priorities, and there are some things that I personally consider more important to fix in libwnck. Note that it really shouldn't be hard to do...
*** Bug 579879 has been marked as a duplicate of this bug. ***
Created attachment 137412 [details] [review] Disable scroll-event in tasklist applet
Comment on attachment 137412 [details] [review] Disable scroll-event in tasklist applet (In reply to comment #8) > It's totally visible to the libwnck developers. The only way to elevate this is > to provide a patch -- it's all a matter of priorities Dear Vincent, here is a patch. I tried it on libwnck-2.26.1 from Debian Lenny (and tasklist is now usable on my laptop). I hope it works on git version too. Regards, jetxee
(In reply to comment #11) > here is a patch. I tried it on libwnck-2.26.1 from Debian Lenny (and tasklist > is now usable on my laptop). I hope it works on git version too. Please make this feature an option, e.g. the patch posted at https://launchpad.net/ubuntu/+source/gnome-panel/+bug/39328/comments/36 is on a good way. Whether to have it enabled or disabled by default is up to the maintainers. My personal opinion: I use scrolling both over the workspace switcher and over the task list nearly every minute, turning it off would lower my productivity. I'm primarily a workstation user and scrolling by mouse over the panel is much faster than switchin apps using Alt+Tab keys. This is heavily addictive feature. I admit it would bother laptop users (which I am too occasionally), so better to make this an option.
Fyi, I've added a patch on https://launchpad.net/ubuntu/+source/gnome-panel/+bug/39328/comments/43 that keeps gconf out of libwnck and just adds a property and handles all the gconf in the applet. Also GUI option to enable/disable scrolling is included. Comments are welcome. (Screenshot https://launchpad.net/ubuntu/+source/gnome-panel/+bug/39328/comments/44)
Bravo, Marcus! I would just rename it from “Enable scrolling”/“Enables scrolling in tasklist” to “Enable scroll-wheel switching”/“Enables scroll-wheel switching in tasklist”, because it is not scrolling (it's not continuous, and it's not reversible).
Created attachment 138131 [details] [review] Property to enable/disable scrolling in tasklist Updated (added documentation) patch to enable/disable scroll-wheel switching via property in the tasklist. Patch against 2.26.2
Created attachment 138132 [details] [review] Patch to set scroll-wheel switching in gui Patch against gnome-panel to set scroll-wheel behavior via gui and gconf-settings. This includes updated text as jetxee suggested. If you find this the right way to tackle this problem and it has a chance of being accepted please let me know and I'll do the same for workspace switching.
Suggestions so far: - Enable scroll-wheel switching - Flip through windows using mouse wheel Is it correct to name it wheel? Touchpads for instance has no "wheel"... Have anyone looked at the code? If all is well please include this fix in the next release or comment why it shouldn't.
Comment on attachment 138131 [details] [review] Property to enable/disable scrolling in tasklist Note: I'm not a libwnck maintainer, but let's give these patches a quick review so that we can probably get this in faster. >+ * @since 2.28 (???) Should be "Since: 2.28". >+wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, >+ gboolean scroll_enabled) Indentation. >+void wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, >+ gboolean scroll_enabled); > void wnck_tasklist_set_grouping_limit (WnckTasklist *tasklist, > gint limit); > void wnck_tasklist_set_include_all_workspaces (WnckTasklist *tasklist, Ditto.
Comment on attachment 138132 [details] [review] Patch to set scroll-wheel switching in gui >+ wnck_tasklist_set_scroll_enabled (WNCK_TASKLIST (tasklist->tasklist), >+ tasklist->scroll_enabled); Indentation. >+ gtk_toggle_button_set_active(tasklist->enable_scroll_check, tasklist->scroll_enabled); Style nitpick: should be _set_active (tasklist->enable...) >+scroll_enabled_changed (GConfClient *client, >+ guint cnxn_id, >+ GConfEntry *entry, >+ TasklistData *tasklist) Indentation. >+ tasklist_properties_update_scroll(tasklist); Missing a space. >+++ gnome-panel-2.26.2/applets/wncklet/window-list.glade 2009-07-09 18:30:31.000000000 +0200 Is there a way to modify this without rewriting the whole glade file? Try using a recent glade-3 editor, or otherwise, the old glade-2 editor. If that still doesn't work, maybe it's not worth to patch the file manually, as gnome-panel will want to migrate to GtkBuilder soon anyway. Also, this patch is that it sets the scrolling to false by default, while I'd keep it to true, which is the current behaviour. Apart from these things, the code looks mostly good to me.
The old patch is obsolete now.
Cosimo, thanks a lot reviewing the code. Is there a place where I can read up on the coding standards for libwnck/gnome-panel? I could try to edit the glade file manually, if the layout is OK (under the right header etc)? I'll update the patch according to your comments.
(thanks again for the first review, Cosimo) (In reply to comment #21) > Cosimo, thanks a lot reviewing the code. Is there a place where I can read up > on the coding standards for libwnck/gnome-panel? Unfortunately no, there's no such place, I believe. And libwnck and gnome-panel have two different coding styles ;-) But usually, just looking at the rest of the code is a good way to know the coding style. > I could try to edit the glade file manually, if the layout is OK (under the > right header etc)? It'd be nice, yes. > I'll update the patch according to your comments. (awesome)
Created attachment 138618 [details] [review] Updated patch according to coding standard and scrolling is enabled as default +wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, + gboolean scroll_enabled) This one gets right if the "+" are removed - or have I done something wrong?
It looks good in the patch, as far as I can tell.
Created attachment 138627 [details] [review] Updated patch against gnome-panel This updated patch has a manually edited glade file, adheres to coding standard, sets scrolling to enabled as default and removes some casting warnings the earlier version had. Also changed the hotkey as "c" was already taken, using "e" now. Please review and comment (or commit if OK ;-) )
*** Bug 586981 has been marked as a duplicate of this bug. ***
Out of curiosity, why would we want this configurable? Why don't we just disable the behavior?
So people who use this feature, like me, still can use it :-) Vincent, any comments on the code?
the change needs to be updated for gtkbuilder now
Even if the patch is updated - is there even a slightest chance this will get in as gnome-panel isn't developed that much these days (because of the gnome shell)?
Any update on this? Is the patch in comment 25 good to commit?
I still have this bug on Ubuntu 16.04, Gnome Flashback Metacity. Is there an option to disable this yet? I can't find it.
Created attachment 350318 [details] [review] Another patch based on the most recent version of libwnck. This patch is based on the idea of previous ones. Hopefully we can get this issue finally solved. It includes an optional getter function, let me know whether that is desired (was requested in another issue).
Review of attachment 350318 [details] [review]: ::: libwnck/tasklist.c @@ +882,3 @@ + * Since: 3.20.2 + */ +void wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, wnck_tasklist_set_scroll_enabled should be in new line. @@ +899,3 @@ + */ +gboolean wnck_tasklist_get_scroll_enabled (WnckTasklist *tasklist) +{ wnck_tasklist_get_scroll_enabled should be in new line. Also probably there should be: g_return_val_if_fail (WNCK_IS_TASKLIST (tasklist), TRUE);
Created attachment 350328 [details] [review] Another patch based on the most recent version of libwnck. Version 2. Fix reviewed issues and add CLI argument in test-tasklist.
Comment on attachment 350328 [details] [review] Another patch based on the most recent version of libwnck. Version 2. >From 5997ff286ac982ee89ca8800e7a1c9fe499c4d6c Mon Sep 17 00:00:00 2001 >From: Moritz Bruder <muesli4@gmail.com> >Date: Mon, 24 Apr 2017 19:36:37 +0200 >Subject: [PATCH] Add an option to disable the tasklist scroll event > >This commit is a minor and optional enhancement of the WnckTasklist >widget. > >It allows to disable scrolling of the tasklist. > >By default scrolling on the tasklist is enabled. The behavior might >be configured by calling wnck_tasklist_set_scroll_enabled. > >https://bugzilla.gnome.org/show_bug.cgi?id=402528 >--- > libwnck/tasklist.c | 41 +++++++++++++++++++++++++++++++++++++++++ > libwnck/tasklist.h | 3 +++ > libwnck/test-tasklist.c | 6 ++++++ > 3 files changed, 50 insertions(+) > >diff --git a/libwnck/tasklist.c b/libwnck/tasklist.c >index c464a0d..89403c9 100644 >--- a/libwnck/tasklist.c >+++ b/libwnck/tasklist.c >@@ -230,6 +230,8 @@ struct _WnckTasklistPrivate > GtkOrientation orientation; > > guint drag_start_time; >+ >+ gboolean scroll_enabled; > }; > > static GType wnck_task_get_type (void); >@@ -596,6 +598,7 @@ wnck_tasklist_init (WnckTasklist *tasklist) > tasklist->priv->monitor_geometry.width = -1; /* invalid value */ > tasklist->priv->relief = GTK_RELIEF_NORMAL; > tasklist->priv->orientation = GTK_ORIENTATION_HORIZONTAL; >+ tasklist->priv->scroll_enabled = TRUE; > > atk_obj = gtk_widget_get_accessible (widget); > atk_object_set_name (atk_obj, _("Window List")); >@@ -869,6 +872,41 @@ void wnck_tasklist_set_orientation (WnckTasklist *tasklist, > } > > /** >+ * wnck_tasklist_set_scroll_enabled: >+ * @tasklist: a #WnckTasklist. >+ * @scroll_enabled: a boolean. >+ * >+ * Sets the scroll behavior of the @tasklist. When set to %TRUE, a scroll >+ * event over the tasklist will change the current window accordingly. >+ * >+ * Since: 3.20.2 >+ */ >+void >+wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, >+ gboolean scroll_enabled) >+{ >+ g_return_if_fail (WNCK_IS_TASKLIST (tasklist)); >+ >+ tasklist->priv->scroll_enabled = scroll_enabled; >+} >+ >+/** >+ * wnck_tasklist_get_scroll_enabled: >+ * @tasklist: a #WnckTasklist. >+ * >+ * Gets the scroll behavior of the @tasklist. >+ * >+ * Since: 3.20.2 >+ */ >+gboolean >+wnck_tasklist_get_scroll_enabled (WnckTasklist *tasklist) >+{ >+ g_return_val_if_fail (WNCK_IS_TASKLIST (tasklist), TRUE); >+ >+ return tasklist->priv->scroll_enabled; >+} >+ >+/** > * wnck_tasklist_set_switch_workspace_on_unminimize: > * @tasklist: a #WnckTasklist. > * @switch_workspace_on_unminimize: whether to activate the #WnckWorkspace a >@@ -1937,6 +1975,9 @@ wnck_tasklist_scroll_event (GtkWidget *widget, > > tasklist = WNCK_TASKLIST (widget); > >+ if (!tasklist->priv->scroll_enabled) >+ return FALSE; >+ > window = g_list_find (tasklist->priv->windows, > tasklist->priv->active_task); > if (window) >diff --git a/libwnck/tasklist.h b/libwnck/tasklist.h >index 37ee385..d2952f8 100644 >--- a/libwnck/tasklist.h >+++ b/libwnck/tasklist.h >@@ -105,6 +105,9 @@ void wnck_tasklist_set_button_relief (WnckTasklist *tasklist, > GtkReliefStyle relief); > void wnck_tasklist_set_orientation (WnckTasklist *tasklist, > GtkOrientation orient); >+void wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, >+ gboolean scroll_enabled); >+gboolean wnck_tasklist_get_scroll_enabled (WnckTasklist *tasklist); > > /** > * WnckLoadIconFunction: >diff --git a/libwnck/test-tasklist.c b/libwnck/test-tasklist.c >index 0912cc8..1874d5f 100644 >--- a/libwnck/test-tasklist.c >+++ b/libwnck/test-tasklist.c >@@ -11,6 +11,7 @@ static gboolean skip_tasklist = FALSE; > static gboolean transparent = FALSE; > static gboolean vertical = FALSE; > static gint icon_size = WNCK_DEFAULT_MINI_ICON_SIZE; >+static gboolean enable_scroll = TRUE; > > static GOptionEntry entries[] = { > {"always-group", 'g', 0, G_OPTION_ARG_NONE, &always_group, "Always group windows", NULL}, >@@ -21,6 +22,7 @@ static GOptionEntry entries[] = { > {"skip-tasklist", 's', 0, G_OPTION_ARG_NONE, &skip_tasklist, "Don't show window in tasklist", NULL}, > {"vertical", 'v', 0, G_OPTION_ARG_NONE, &vertical, "Show in vertical mode", NULL}, > {"transparent", 't', 0, G_OPTION_ARG_NONE, &transparent, "Enable Transparency", NULL}, >+ {"disable-scroll", 'd', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &enable_scroll, "Disable scrolling", NULL}, > {NULL } > }; > >@@ -102,6 +104,10 @@ main (int argc, char **argv) > wnck_tasklist_set_grouping (WNCK_TASKLIST (tasklist), > WNCK_TASKLIST_AUTO_GROUP); > >+ if (!enable_scroll) >+ wnck_tasklist_set_scroll_enabled (WNCK_TASKLIST (tasklist), >+ FALSE); >+ > wnck_tasklist_set_middle_click_close (WNCK_TASKLIST (tasklist), TRUE); > > wnck_tasklist_set_orientation (WNCK_TASKLIST (tasklist), >-- >2.12.2 >
Review of attachment 350328 [details] [review]: ::: libwnck/tasklist.c @@ +884,3 @@ +void +wnck_tasklist_set_scroll_enabled (WnckTasklist *tasklist, + gboolean scroll_enabled) indentation. ::: libwnck/test-tasklist.c @@ +23,3 @@ {"vertical", 'v', 0, G_OPTION_ARG_NONE, &vertical, "Show in vertical mode", NULL}, {"transparent", 't', 0, G_OPTION_ARG_NONE, &transparent, "Enable Transparency", NULL}, + {"disable-scroll", 'd', G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &enable_scroll, "Disable scrolling", NULL}, indentation. @@ +107,3 @@ + if (!enable_scroll) + wnck_tasklist_set_scroll_enabled (WNCK_TASKLIST (tasklist), + FALSE); I think there is no need to put this parameter in new line. Also can not this be: wnck_tasklist_set_scroll_enabled (WNCK_TASKLIST (tasklist), enable_scroll); ?
Created attachment 350337 [details] [review] Another patch based on the most recent version of libwnck. Version 3. Thanks Alberts and my apologies for the unnecessary spam I will be more thorough next time.
Review of attachment 350337 [details] [review]: Looks good to me, but lets wait what maintainer will say.
Review of attachment 350337 [details] [review]: It would have probably been nicer to just disconnect the scroll signal, but since how this is made, it would cause more work than gains... So, ok, let's go with this.
Review of attachment 138627 [details] [review]: This needs to be updated, gnome-panel does not use gconf now.
(In reply to Alberts Muktupāvels from comment #42) > Review of attachment 138627 [details] [review] [review]: > > This needs to be updated, gnome-panel does not use gconf now. I wrote the following code for *mate-panel* (which should be almost identical to *gnome-panel*): https://github.com/muesli4/mate-panel/commits/libwnck-additions In case anyone wants to adopt the code.
bugzilla.gnome.org is being replaced by gitlab.gnome.org. We are closing all old feature requests in Bugzilla which have not seen updates for many years. If you still use gnome-panel and if you are still requesting this feature in a currently supported version of GNOME (currently that would be 3.38), then please feel free to report it at https://gitlab.gnome.org/GNOME/gnome-panel/-/issues/ Thank you for reporting this issue and we are sorry it could not be implemented.