Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Démarrage du dock sans des 'artefacts' graphiques au démarrage
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Démarrage du dock sans des 'artefacts' graphiques au démarrage
matttbe Français 14 matttbe [Read]
19 March 2012 à 13:43

matttbe, Wednesday 07 December 2011 à 03:03


Subscription date : 24 January 2009
Messages : 12573
Hello,

Est-ce que ce serait possible d'éviter des "artefacts" (petits détails graphiques pas très élégants) au démarrage. En d'autres mots, au lancement du dock, il y a un cadre uni (blanc chez moi mais ça change en fonction du thèmes gtk je crois) ainsi qu'un dock blanc. Serait-il possible d'éviter cela?
En affichant le dock après l'avoir chargé invisiblement (je ne connais pas assez gtk mais p-ê utiliser 'gtk_widget_show_all' pour la fenêtre du dock plus tard)? Ou alors le cacher et le faire apparaître après? Avec du gtk3, on peut appliquer du css pour forcer le fond transparent d'un GTKWindow par exemple mais c'est plus une solution de contournement.

http://uppix.net/d/0/d/636d10233cadab25b5d238b897bf9.png

lylambda, Wednesday 07 December 2011 à 09:51


Subscription date : 06 September 2009
Messages : 1635
Ah ? Cela existe aussi en OpenGl et sur les cartes graphiques récentes ? Je croyais que c'était dût à la vétusté de mon PC perso.
Du coup, si c'est possible, je serais aussi totalement pour : ce n'est pas gênant en soit, mais cela retirerais l'impression de "pas finis" que pourrais ressentir un nouvel utilisateur.

fabounet, Friday 09 December 2011 à 12:56


Subscription date : 30 November 2007
Messages : 17118
j'avais essayé de dessiner la fenêtre en invisible pendant le chargement, mais en fait on n'est même pas appelé.

on peut essayer en ajoutant un gtk_widget_hide lors de la création de la fenêtre, puis un gtk_widget_show_all à la fin du chargement du thème.
ça peut être fait rapidement, qqun teste ?

matttbe, Friday 09 December 2011 à 13:34


Subscription date : 24 January 2009
Messages : 12573
on peut essayer en ajoutant un gtk_widget_hide lors de la création de la fenêtre
Donc appliquer ce patch?
=== modified file 'src/gldit/cairo-dock-dock-factory.c'
--- src/gldit/cairo-dock-dock-factory.c    2011-12-02 01:00:13 +0000
+++ src/gldit/cairo-dock-dock-factory.c    2011-12-09 12:32:44 +0000
@@ -188,+188,@@
         
pDock);*/
 
     
gtk_window_get_size (GTK_WINDOW (pWindow), &pDock->container.iWidth, &pDock->container.iHeight);  // ca n'est que la taille initiale allouee par GTK.
-    gtk_widget_show_all (pWindow);
+    
gtk_widget_hide (pWindow);
     
#if (GTK_MAJOR_VERSION < 3)
     
gdk_window_set_back_pixmap (pWindow->windowNULLFALSE);
     
#else




puis un gtk_widget_show_all à la fin du chargement du thème.
Où exactement?
Dans "cairo_dock_load_current_theme"? (pour ne pas avoir des: assertion `GDK_IS_WINDOW (window)' failed

fabounet, Wednesday 14 December 2011 à 14:56


Subscription date : 30 November 2007
Messages : 17118
en fait, je pensais dans cairo_dock_load_current_theme, mais sinon dans la callback "realized"
sinon, faut tâtonner

lylambda, Wednesday 01 February 2012 à 21:50


Subscription date : 06 September 2009
Messages : 1635
Ce sujet a bien avancé : maintenant mes docks apparaissent d'un coup, au bon endroit, sans artefact

On pourrait passé en résolu si c'était aussi le cas des desklets. Ce serait possible ?
Ici on peut voir deux desklets sur la couche widget de Compiz et le old-systray lors du démarrage de CD:

http://uppix.net/2/7/a/f06bcb16bbb62e8bddd274aaf84b8.png

matttbe, Thursday 02 February 2012 à 11:50


Subscription date : 24 January 2009
Messages : 12573
Oh, j'ai dû louper ce changement , qu'est-ce qui a changé dans le chargement?
Je testerai dès que possible!

lylambda, Thursday 02 February 2012 à 15:44


Subscription date : 06 September 2009
Messages : 1635
qu'est-ce qui a changé dans le chargement?
Il n'y a plus d'artefacts et de cadres blancs (hormis pour les desklets). Du coup, le dock apparait "proprement" au bon endroit contrairement a avant .

matttbe, Sunday 05 February 2012 à 01:11


Subscription date : 24 January 2009
Messages : 12573
Moi j'en ai tjs encore (c'est p-ê plus court mais j'en ai) mais c'est p-ê uniquement parce que j'ai la version avec GTK3

matttbe, Wednesday 07 March 2012 à 12:19


Subscription date : 24 January 2009
Messages : 12573
Merci Fab pour le dernier changement sur la taille minimum des fenêtres
Ça réduit déjà énormément la taille de la zone d'artefacts au démarrage!

(je vais voir s'il n'y a pas moyen de forcer d'avoir une fenêtre transparente avec du CSS.

fabounet, Wednesday 07 March 2012 à 12:43


Subscription date : 30 November 2007
Messages : 17118
Ça réduit déjà énormément la taille de la zone d'artefacts au démarrage!

ah, elle est encore visible ? pourtant j'ai mis 1x1, plus petit que ça et le dock disparait dans une faille spatio-temporelle de ton écran

matttbe, Wednesday 07 March 2012 à 12:46


Subscription date : 24 January 2009
Messages : 12573
Je crois que ça ne concerne que les desklets.

Ex: avec l'ancien systray qui va aller dans le widget compiz:
http://uppix.com/f-Screenshot_from_4f5766cd000f6d6c.png

matttbe, Wednesday 07 March 2012 à 14:43


Subscription date : 24 January 2009
Messages : 12573
J'ai aussi le problème à l'ouverture des sous-dock (ex: vue slide) et au lancement automatique du dock au démarrage de la session (lorsque le dock apparaît)
(on dirait que la fenêtre est créée à la bonne taille puis devient transparente (c'est très rapide mais ça se voit))

fabounet, Thursday 08 March 2012 à 13:27


Subscription date : 30 November 2007
Messages : 17118
bizarre car je pense bien avoir mis le 1x1 dans la classe Container, donc celle de plus haut niveau.
faudrait creuser

matttbe, Monday 19 March 2012 à 13:43


Subscription date : 24 January 2009
Messages : 12573
J'ai fait qqs rapides recherches sur le sujet.

En prenant l'exemple venant de http://stackoverflow.com/questions/3908565/how-to-make-gtk-window-background-transparent, je m’aperçois que le problème est le même avec sa fenêtre. Normalement, on n'a pas le temps de voir la zone blanche car le chargement de l'appli est très rapide. Cependant, si je ralenti le chargement (par exemple en lançant le programme avec valgrind), on voit bien que d'abord la fenêtre est créée (elle est blanche) puis elle devient transparente. (je suppose que c'est parce que le signal 'expose-event' est envoyé juste après que la fenêtre soit créée mais ça reste après...)

Cependant, j'ai trouvé un workaround pas mal
Utiliser gtk_window_set_opacity! À la création de tous les containers, mettre l’opacité à 0 et une fois le dessin réalisé, passer l'opacité à 1. En appliquant ce patch juste pour tester, je n'ai plus de problème avec les docks et j'ai droit à un court effet de fondu donc c'est même sympa bien visuellement!
=== modified file 'src/gldit/cairo-dock-dock-factory.c'
--- src/gldit/cairo-dock-dock-factory.c    2012-03-13 09:37:04 +0000
+++ src/gldit/cairo-dock-dock-factory.c    2012-03-19 12:20:34 +0000
@@ -506,+506,10 @@
     }
 }
 
+static 
gboolean _opacity (GtkWindow *pWindow)
+{
+    
gtk_window_set_opacity (pWindow1.0);
+}
 
 
CairoDock *cairo_dock_new_dock (void)
 {
@@ -
606,+610,@@
         
G_CALLBACK (cairo_dock_on_drag_drop),
         
pDock);*/
 
+    
gtk_window_set_opacity (GTK_WINDOW (pWindow), 0.0);
     
gtk_window_get_size (GTK_WINDOW (pWindow), &pDock->container.iWidth, &pDock->container.iHeight);  // ca n'est que la taille initiale allouee par GTK.
     
gtk_widget_show_all (pWindow);
     
#if (GTK_MAJOR_VERSION < 3)
@@ -613,+618,@@
     
#else
     
gdk_window_set_background_pattern (gldi_container_get_gdk_window (CAIRO_CONTAINER (pDock)), NULL);
     
#endif
+    g_timeout_add (1500, (GSourceFunc_opacityGTK_WINDOW (pWindow));
     return 
pDock;
 }
 


Par contre, je ne sais pas trop où ce serait le mieux de lancer l'action pour opacifier... Dans la fonction cairo_dock_on_expose mais on a besoin d'opacifier qu'une seule fois.

PS: en plus, ça résoudrait le problème avec les icônes transparentes
PS²: d'après la dock, il faudrait d'abord vérifier que ceci est ok: 'gtk_widget_is_composited()'

Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Démarrage du dock sans des 'artefacts' graphiques au démarrage
matttbe Français 14 matttbe [Read]
19 March 2012 à 13:43


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Démarrage du dock sans des 'artefacts' graphiques au démarrage Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.