[fvwm] thumbnails en guise de taskbar permanente

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
tandycorp
Daikyu
Messages : 50
Inscription : lun. 25 juin 2007, 16:53
Localisation : Rive-sud de Montréal

[fvwm] thumbnails en guise de taskbar permanente

Message par tandycorp »

Bonjour, comme j'en avais déjà parlé à Warnaud au bas de cette page:
http://forums.archlinux.fr/topic63-75.html,
je voulais réserver une zone à gauche de mon écran large LCD pour que chaque application minimisée se retrouve dans un ptit thumbnail (mini screenshot de l'appli ouverte) MAIS qui serait toujours visible... comme une "taskbar" mais utilisant des thumbnails au lieu du texte.

Maintenant j'ai partiellement réussi: cette zone est actuellement réservée, mes applis maximisés ne prennent plus tout l'écran et donc n'écrasent plus ou ne cachent plus cette zone à thumbnails à gauche.

Par contre quand je clique sur un thumbnail il disparait aussitot car l'appli est alors désiconifiée, autrement dit sélectionnée. Donc si j'ai 2-3 applis ouvertes, impossible de passer de une vers l'autre sauf si je les abaissent toutes, ce qui fait apparaitre leurs thumbnails.

Comment faire pour que les thumbnails soit toujours là aussitot l'appli ouverte jusqu'à sa fermeture ?? (comme dans une task bar)

J'utilse fvwm-patched derniere version ainsi que le theme et config de stonecrest
http://www.theskyiscrape.com/scott/fvwm_green.tar.gz
Dernière modification par tandycorp le dim. 12 août 2007, 03:06, modifié 1 fois.
Avatar de l’utilisateur
Skunnyk
Maître du Kyudo
Messages : 1137
Inscription : mer. 06 sept. 2006, 21:31
Localisation : IRC
Contact :

Message par Skunnyk »

Plop =)
Ca tombe bien, c'est le genre de chose que je voulais dans fvwm mais que je savais pas faire :p Et d'apres Maitre Warnaud, dans une prochaine version de fvwm, cela srais possible (enfin, d'apres mes souvenirs :p), mais cest clair que ca pourrais etre vachement utile ! :)
tandycorp
Daikyu
Messages : 50
Inscription : lun. 25 juin 2007, 16:53
Localisation : Rive-sud de Montréal

Message par tandycorp »

ok dans la config que j'ai je me rends compte que l'auteur a recourt à un ptit prog écrit en C qui génère les thumbnails plus rapidement ..

donc merde, c'est plus complexe que je croyais...
est-ce que quelqu'un comprends ça ? :

Code : Tout sélectionner

#include <X11/Xlib.h>
#include <Imlib2.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
        Display *display;
        XWindowAttributes windowattr;
        Imlib_Image image;
        Imlib_Image icon;
        int windowid, thumbwidth, thumbheight;
        char *imageformat, *imagepath;
        char *iconformat, *iconpath;
   int w, h;

        if ( argc != 5 ) {
       puts("Usage: thumb WindowId ThumbWidth ThumbFile IconFile");
       return 1;
   }
        sscanf(argv[1], "%x", &windowid);
        sscanf(argv[2], "%d", &thumbwidth);
        imagepath = argv[3];
        imageformat = strrchr(argv[3], '.');
        iconpath = argv[4];
        iconformat = strrchr(argv[4], '.');


        if ( (display = XOpenDisplay(NULL)) == NULL ) return 1;
        XGetWindowAttributes(display, windowid, &windowattr);
        thumbheight = thumbwidth*3/4;

        imlib_context_set_anti_alias(1);
        imlib_context_set_display(display);
        imlib_context_set_visual(DefaultVisual(display, DefaultScreen(display)));
        imlib_context_set_colormap(DefaultColormap(display, DefaultScreen(display)));
        imlib_context_set_drawable(windowid);

        if ( 4*thumbwidth >= windowattr.width || 4*thumbheight >= windowattr.height ) {
                image = imlib_create_image_from_drawable((Pixmap)0, 0, 0,
                        windowattr.width, windowattr.height, 1);
                imlib_context_set_image(image);
                image = imlib_create_cropped_scaled_image(0, 0, windowattr.width, windowattr.height,
                        thumbwidth, thumbheight);
        } else {
                image = imlib_create_scaled_image_from_drawable((Pixmap)0, 0, 0,
                        windowattr.width, windowattr.height, 4*thumbwidth, 4*thumbheight, 1, 1);
                imlib_context_set_image(image);
                image = imlib_create_cropped_scaled_image(0, 0, 4*thumbwidth, 4*thumbheight,
                        thumbwidth, thumbheight);
        }
   icon = imlib_load_image(argv[4]);
        imlib_context_set_image(icon);
   w = imlib_image_get_width();
   h = imlib_image_get_height();
        imlib_context_set_image(image);
   imlib_blend_image_onto_image(   icon, 0,
               0, 0, w, h,
               0, 0, w, h);
        imlib_image_set_format(imageformat + 1);
        imlib_save_image(argv[3]);

   fprintf(stdout, "WindowStyle IconOverride, Icon %s\n", argv[3]);
        return 0;
}
Avatar de l’utilisateur
Tebo
Chu Ko Nu
Messages : 368
Inscription : sam. 17 mars 2007, 23:24

Message par Tebo »

Pour l'utiliser il faut installer imlib2 et appeler le binaire dans la fonction:

Code : Tout sélectionner

DestroyFunc Thumbnail
AddToFunc Thumbnail
+ I PipeRead "echo $[w.id] >> /dev/shm/.icons"
+ I Raise
+ I ThisWindow (!Shaded, Iconifiable, !Iconic) \
        PipeRead "$[fvwm_bin]/thumb $[w.id] $[fvwm_icon_size] \
        /dev/shm/icon.tmp.$[w.id].png $[w.miniiconfile]"
+ I Iconify
Humm j'ai pas trop compris se que tu voulais faire au final.
Moi je travail à mettre les thumbnail dans une iconbox rétractable. L'idéal serait de la faire apparaître au passage de la souris dans le coin supérieur droit. Un peu comme béryl :twisted:
tandycorp
Daikyu
Messages : 50
Inscription : lun. 25 juin 2007, 16:53
Localisation : Rive-sud de Montréal

Message par tandycorp »

Tebo a écrit : Humm j'ai pas trop compris se que tu voulais faire au final.
Moi je travail à mettre les thumbnail dans une iconbox rétractable. L'idéal serait de la faire apparaître au passage de la souris dans le coin supérieur droit. Un peu comme béryl :twisted:
C'est que les thumnails disparaissent quand on clique dessus (C'est toujours comme ça, c'est normal, ça s'appelle l'icônification). Mais moi je voudrais que les thumbnails restent sauf quand on ferme leurs applis. C'est tout.

Car une application a beau être ouverte, si elle n'est pas en tout premier plan je ne la vois pas! Et sans taskbar, je dois alors minimiser ce que je suis en train de faire pour la retrouver, autrement dit les thumbnails ne font rien d'utile dans ma vie actuellement.
Avatar de l’utilisateur
Tebo
Chu Ko Nu
Messages : 368
Inscription : sam. 17 mars 2007, 23:24

Message par Tebo »

Ok pourquoi ne pas utiliser ? :
Key Tab A M WindowList Root c c NoCurrentDeskTitle NoGeometry SortByClass NoHotkeys
tandycorp
Daikyu
Messages : 50
Inscription : lun. 25 juin 2007, 16:53
Localisation : Rive-sud de Montréal

Message par tandycorp »

Tebo a écrit :Ok pourquoi ne pas utiliser ? :
Key Tab A M WindowList Root c c NoCurrentDeskTitle NoGeometry SortByClass NoHotkeys
euh, c'est pour utiliser des raccourcis clavier ça? Peut-etre plus tard, mais s.v.p. j'aimerais bien gérer mes fenetres avec ces petits screenshots...

Peut-être qu'une simple ligne serait à modifier dans la config fvwm? Celle que j'ai prise sur Internet est divisée en plusieurs fichiers. Alors je crois que ce qui suit contient tout ce qui gère les thumnails:
~/.fvwm/fvwm2rc.thumbnails

Code : Tout sélectionner

SetEnv fvwm_icon_size 100
DestroyFunc Thumbnail
AddToFunc Thumbnail
+ I PipeRead "echo $[w.id] >> $[FVWM_USERDIR]/.icons"
+ I Raise
+ I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead "$[FVWM_USERDIR]/scripts/thumb $[w.id] $[fvwm_icon_size] /dev/shm/icon.tmp.$[w.id].png $[w.miniiconfile]"
+ I Iconify

DestroyFunc DeThumbnail
AddToFunc DeThumbnail
+ I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]"
+ I Exec exec rm -f /dev/shm/icon.tmp.$[w.id].png
+ I PipeRead "sed -ie '/$[w.id]/d' $[FVWM_USERDIR]/.icons"

*FvwmEvent: deiconify DeThumbnail

# This will remove gaps when de-iconifying an application
AddToFunc DeiconifyAndRearrange
+ C Iconify off
+ C All (CurrentPage, Iconic) PlaceAgain Icon
AddToFunc IconFunc
 + C DeiconifyAndRearrange
 + M Raise
 + M Move
 + D DeiconifyAndRearrange

# This will remove gaps when de-iconifying an application from the keybinding
DestroyFunc DeiconifyAndRearrange2
AddToFunc DeiconifyAndRearrange2
+ I Iconify off
+ I All (CurrentPage, Iconic) PlaceAgain Icon
Avatar de l’utilisateur
warnaud
Maître du Kyudo
Messages : 1640
Inscription : ven. 11 août 2006, 17:05
Localisation : Rolle (CH)

Message par warnaud »

En fait les thumbnails, générés ou non par un programme en C (sur des proc récent la différence est pas visible, niveau vitesse) c'est que ça fait "juste" un screenshot réduit de la fenêtre pour le coller en tant qu'icone de l'appli que tu minimise.
Perso je verrais plus comme tebo une WindowsList toujours visible avec les icones des applis qui sont des "thumbnails" (sans le Root c c qui centre la WindowList)
Problème il faut créer ces thumbnails ... mais quand ? à l'ouverture de l'appli ? toute les 5s ?
Si on utilise la solution de Tebo, en faisant Alt+Tab il faudrait lancer une appli qui fasse un screenshot de toutes les applis du bureau (ou de la page) avant d'afficher une WindowList. C'est à mon avis ce qui va se rapprocher le plus d'une solution correcte. Sinon les screenshots seront pas à jour, ou alors faudrai les rafraichir avec FvwmEvent à chaque entrée / sortie d'une fenêtre.
Dernière soluce, avec la "barre des tâches" de fvwm en gérant la taille des entrées et en affichant que le thumbnails de l'application (la barre peut-être transparente et dans une zone non recouvrable de base) il restera le délire de mettre à jour le thumbnails.
Plus ça rate, plus ça a de chance de réussir. En somme, un succès n'est qu'une erreur qui a finit par réussir (même par erreur). Ne déséspérez donc pas et perseverez. Utilisez La Rache™
Patientia quod lard quod barrus planto diligo ut licentia
—¤÷(`[¤*Powered By *¤]´)÷¤—
Archlinux ~ Fvwm ~ Irssi ~ URxvt
tandycorp
Daikyu
Messages : 50
Inscription : lun. 25 juin 2007, 16:53
Localisation : Rive-sud de Montréal

Message par tandycorp »

merci warnaud et tebo, je comprends mieux la difficulté... mais au fond une actualisation toute les 5 dec ne serait pas une si mauvaise idée : ce serait moins compliqué à programmer et surtout la demande au processeur ne se ferait pas à chaque fois qu'une modification est faite à la fenetre, donc on évite d'augmenter la charge processeur au meme moment qu'on fait justement une requête qui va exiger des ressources..

aussi on peut faire l'actualisation un thumnail à la fois, en basse priorité..

le seul hic est que ces changements soudains dans notre écran, en décalage avec la réalité, attire l'oeil et cela peut devenir agaçant pour l'utilisateur mais bah..

ou alors on pourrait cacher cette taskbar et la faire apparaitre seulement à la demande: c'est moins agaçant à l'oeil, et il est possible de créer les thumbnails à ce moment précis sauf que si plusieurs fenetres sont ouvertes il risque d'y avoir un délai.. alors je vois deux options: faire apparaitre les thumnails dans un certain ordre, une sorte d'animation quoi le temps de les créer, ou alors actualiser les thumnails toutes les 5 secondes meme en background lorsque la taskbar est cachée..
Répondre