#1 Le 06/05/2012, à 16:35
- Oti
[astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Bonjour,
Si vous aussi ça vous manque terriblement de pouvoir changer d'onglet avec la molette de votre sourie dans les applications GTK3, comme ça se faisait avant dans GTK2 (et dans Firefox avec l'extension "Tab Wheel Scroll"), voici comment faire pour retrouver le saint graal du GTK :
On installe le nécessaire à la compilation :
mkdir dev
cd dev
sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep libgtk-3-0
apt-get source libgtk-3-0
rm -rf gtk+3.0-*
On récupère le patch (je l'ai mis à la fin du message aussi) :
wget https://launchpadlibrarian.net/101685319/undo_no_scroll.patch
mv undo_no_scroll.patch 045_undo_no_scroll.patch
Dans l'archive gtk+3.0_3.4.1-0ubuntu1.debian.tar.gz, aller dans le dossier debian/patches/
- Supprimer le fichier 043_notebook_scroll.patch
- Ajouter le fichier 045_undo_no_scroll.patch
- Editer le fichier series :
- Supprimer (si elle existe) la ligne "043_notebook_scroll.patch"
- Ajouter une ligne "045_undo_no_scroll.patch"
On vient de modifier le fichier gtk+3.0_3.4.1-0ubuntu1.debian.tar.gz, on doit donc modifier ses sommes de contrôles et sa taille dans le fichier gtk+3.0_3.4.1-0ubuntu1.dsc (en rouge, ci-dessous) :
Checksums-Sha1:
91b68f0dd5f6558eae98811f4031f32ff46ad172 12809412 gtk+3.0_3.4.1.orig.tar.xz
606ad2f0d2bc1cdb6bbe69dd2e78f3539e0459fb 111790 gtk+3.0_3.4.1-0ubuntu1.debian.tar.gz
Checksums-Sha256:
0716b533de0ff2ffdec1076bb85c7a95e2b7b6ac9ece71e84625043ae3eb25f7 12809412 gtk+3.0_3.4.1.orig.tar.xz
fe2336944b9c2320d30596e7c439557f51a585ccdd2971b9ae50da9821749577 111790 gtk+3.0_3.4.1-0ubuntu1.debian.tar.gz
Files:
2cbf02394c2c42cc597405eadabcac3e 12809412 gtk+3.0_3.4.1.orig.tar.xz
45e99a4320edc38160531ff809e86281 111790 gtk+3.0_3.4.1-0ubuntu1.debian.tar.gz
Utiliser le code suivant pour récupérer les bonnes infos :
i=gtk+3.0*.debian.tar.gz
sha1sum $i && sha256sum $i && md5sum $i && ll $i
Il ne reste plus qu'à appliquer le patch et à compiler :
dpkg-source -x gtk+3.0*.dsc # Sous Debian Testing (en cas de mauvaise signature) : dpkg-source --no-check -x gtk+3.0*.dsc
cd gtk+3.0*/
sudo dpkg-buildpackage -rfakeroot -b
cd ..
sudo dpkg -i *.deb
Normalement, si je n'ai rien oublié, tout est bon. Ca marche dans epiphany, nautilus, etc... Et ça ne pose pas de problème dans le terminal.
Maintenant vous pouvez arrêter d'utiliser des poupées vaudou contre Cody Russell (puisque c'est à ce sous doué mental que l'on doit cette boulette : https://bugzilla.gnome.org/show_bug.cgi?id=630226), et l'on peut remercier notre héros, Otus (jan-varho), pour son patch (https://bugs.launchpad.net/ubuntu/+sour … bug/872055).
Le patch en question (au cas où) :
Index: gtk+3.0-3.4.1/gtk/gtknotebook.c
===================================================================
--- gtk+3.0-3.4.1.orig/gtk/gtknotebook.c 2012-04-13 13:25:05.000000000 +0300
+++ gtk+3.0-3.4.1/gtk/gtknotebook.c 2012-04-13 13:44:20.000000000 +0300
@@ -304,6 +304,9 @@
GtkWidget *child,
gboolean *expand,
gboolean *fill);
+static gboolean gtk_notebook_scroll (GtkWidget *widget,
+ GdkEventScroll *event);
+
/*** GObject Methods ***/
static void gtk_notebook_set_property (GObject *object,
@@ -665,6 +668,7 @@
widget_class->drag_data_received = gtk_notebook_drag_data_received;
widget_class->drag_failed = gtk_notebook_drag_failed;
widget_class->compute_expand = gtk_notebook_compute_expand;
+ widget_class->scroll_event = gtk_notebook_scroll;
container_class->add = gtk_notebook_add;
container_class->remove = gtk_notebook_remove;
@@ -1893,7 +1897,8 @@
attributes.event_mask = gtk_widget_get_events (widget);
attributes.event_mask |= (GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK |
- GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
+ GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK |
+ GDK_SCROLL_MASK);
attributes_mask = GDK_WA_X | GDK_WA_Y;
priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
@@ -2858,6 +2863,52 @@
return FALSE;
}
+static gboolean
+gtk_notebook_scroll (GtkWidget *widget,
+ GdkEventScroll *event)
+{
+ GtkNotebook *notebook = GTK_NOTEBOOK (widget);
+ GtkNotebookPrivate *priv = notebook->priv;
+ GtkWidget *child, *event_widget;
+ gint i;
+
+ if (!priv->cur_page)
+ return FALSE;
+
+ child = priv->cur_page->child;
+ event_widget = gtk_get_event_widget ((GdkEvent *)event);
+
+ /* ignore scroll events from the content of the page */
+ if (!event_widget || gtk_widget_is_ancestor (event_widget, child) || event_widget == child)
+ return FALSE;
+
+ /* nor from the action area */
+ for (i = 0; i < 2; i++)
+ {
+ if (event_widget == priv->action_widget[i] ||
+ (priv->action_widget[i] &&
+ gtk_widget_is_ancestor (event_widget, priv->action_widget[i])))
+ return FALSE;
+ }
+
+ switch (event->direction)
+ {
+ case GDK_SCROLL_RIGHT:
+ case GDK_SCROLL_DOWN:
+ gtk_notebook_next_page (notebook);
+ break;
+ case GDK_SCROLL_LEFT:
+ case GDK_SCROLL_UP:
+ gtk_notebook_prev_page (notebook);
+ break;
+ case GDK_SCROLL_SMOOTH:
+ /* Ignore smooth scrolling (-Wswitch) */
+ break;
+ }
+
+ return TRUE;
+}
+
static GList*
get_tab_at_pos (GtkNotebook *notebook, gint x, gint y)
{
Dernière modification par Oti (Le 02/10/2012, à 12:12)
Hors ligne
#2 Le 07/05/2012, à 15:51
- Brazakhan
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
La procédure marche parfaitement bien.
J'ai testé plusieurs choses (terminal, firefox, nautilus, gedit, ...) et je n'ai trouvé aucun bug nul part.
Seul bémol, ça ne fonctionne toujours pas sur la liste des fenêtres ouvertes dans le panel, dommage. Mais ce n'est peut-être pas directement lié à ça?
En tout cas merci beaucoup car cette fonctionnalité est vraiment indispensable une fois qu'on s'y est habitué!
Dernière modification par Brazakhan (Le 07/05/2012, à 15:52)
Hors ligne
#3 Le 07/05/2012, à 19:57
- Oti
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Bon, c'est cool que ça marche tout bien comme y faut.
Je ne suis pas sûr de voir de quoi tu parles pour les fenêtres ouvertes dans le panel, mais si ça ne marche pas c'est sûrement que ce ne sont pas des onglets ou alors c'est peut être du GTK2 ou du Gnome Shell...
Moi je suis tout perdu quand j'ai pas cette fonctionnalité, c'est très addictif !
Hors ligne
#4 Le 08/05/2012, à 10:29
- Brazakhan
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Je parlais de la liste des fenêtres sur le tableau de bord (avec les bons mots c'est mieux ).
Mais ce n'est probablement pas lié à Gtk3 ... tant pi.
En tout cas, merci encore car je trouve que cette fonctionnalité est vraiment primordiale et je ne comprend vraiment pas comment on peut avoir l'idée de la supprimer.
Hors ligne
#5 Le 19/05/2012, à 07:23
- Brazakhan
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Salut!
Juste une petite question, comment on fait pour les Maj? :-)
Parce que "apt-get source libgtk-3-0" me dl toujours la version 3.4.1 au lieu de la 3.4.2 et je ne sais pas comment faire juste à partir des sources...
Merci!
Hors ligne
#6 Le 20/05/2012, à 00:32
- Oti
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Normalement, je dirais que dès qu'un paquet est mis à jour, sa version "source" devrait l'être aussi (là je suis sous Debian alors je peut pas tester tout de suite).
Il y a peut être un argument apt-get pour spécifier une version particulière. Et si vraiment il se passe du temps entre les mises à jour des deux dépôts, il n'y a qu'à attendre malheureusement.
Je regarderai ça dès que j'ai mon Ubuntu sous le coude.
Aussi j'ai rajouté des * dans les commandes pour pas se faire #!/usr/bin/caca à tout changer.
Hors ligne
#7 Le 22/05/2012, à 17:45
- Brazakhan
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Oui c'est bizarre que la version de la source ne soit pas la même que celle proposée dans les maj.
J'imagine qu'il est possible de construire les paquets à partir de la source téléchargeable sur le site de gtk3 mais je sais pas faire :'(
EDIT: Et au fait, j'ai essayé de forcer la version avec apt-get source libgtk-3-0=3.4.2 mais ça ne marche pas alors qu'avec apt-get source libgtk-3-0=3.4.1 ça marche donc c'est vraiment que la source n'est pas à jour.
Dernière modification par Brazakhan (Le 22/05/2012, à 19:58)
Hors ligne
#8 Le 22/05/2012, à 21:59
- Oti
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
La liste des fichiers (http://fr.archive.ubuntu.com/ubuntu/dis … nary-amd64) indique : "Version: 3.4.1-0ubuntu1"
Donc pour Ubuntu 12.04 il n'y a pas encore de mise à jour vers la version 3.4.2. Cela dit, en farfouillant j'ai trouvé les sources à cette adresse : http://fr.archive.ubuntu.com/ubuntu/poo … g/gtk+3.0/
gtk+3.0_3.4.2-0ubuntu2.debian.tar.gz 18-May-2012 18:03 111K
gtk+3.0_3.4.2-0ubuntu2.dsc 18-May-2012 18:03 2.7K
gtk+3.0_3.4.2.orig.tar.xz 16-May-2012 12:47 12M
Ces paquets sont peut être destiné à Ubuntu 12.10 par contre. Si le système te propose de mettre à jour les paquets c'est peut être que ton fichier sources pointe vers la prochaine Ubuntu ?
Hors ligne
#9 Le 29/05/2012, à 21:41
- Brazakhan
Re : [astuce]GTK3 Changer d'onglet avec la molette (mouse wheel tab switch)
Salut!
J'ai enfin pu tester tout ça.
Alors en fait, il semble que j'ai cette maj parce que j'ai coché les "proposed".
Et j'ai essayé avec les sources de tno lien et tout semble marcher parfaitement
Donc merci beaucoup!
Hors ligne