Xfce4-notifyd samostalno vene

Verzija 0.3.1 xfce4-notifyd je dodala skrivenu opciju "do-fadeout", tako da ovo hakasto riješenje nije više potrebno. Pomoću xfconf-query je moguće isključiti efekat:

xfconf-query -c xfce4-notifyd -p /do-fadeout -n -t bool -s false

Vene u smislu "postepeno postaje proziran i nestane" ili na engleski fade-out. Nedavno sam počeo koristiti Compton na desktopu. Prvenstveno zbog v-synca za Nouveau drajvere koje koristim za grafičku. Kao prijatna nuspojava tu je i lijepši izgled sa sjenama, prozirnošću i upravo pomenutim fade-inom i fade-outom. Kao i uvijek, ne može ništa proći bez problema.

Ovaj put je problem stvarao xfce4-notifyd. To je implementacija freedesktop specifikacije za notifikacije koja dolazi sa Xfce radnim okruženjem, ali se može naravno koristiti i van njega. Primjetio sam da se notifikacije postepeno sklanjaju i "izlape", umjesto da nestanu odmah. Provjerio sam Comptonov konfiguracioni fajl i dodao xfce4-notifyd za ignorisanje fade-outa, ali se i dalje postepeno gasio.

Brzo pretraživanje interneta kaže kaže da je krivac xfce4-notifyd. Naime xfce4-notifyd ima sopstveno fade-outovanje u slučaju da je pokrenut kompozitor. Ne postoji opcija za isključivanje prema ovome izvještaju za bag.

Ne znam zašto, ali sam pogledao izvorni fajl od xfce4-notifyd. Pošto nemam apsolutno nimalo znanja o C programiranju, jedino što mi je preostalo je da nasumično pokušam izbrisati nešto što liči kao da ima uticaja na fade-out. Našao sam fajl za xfce-notify-window.c i tražio gdje se sve spominje fade-out. Obećavajuće je izgledala xfce_notify_window_expire_timeout() funkcija koja počinje na liniji 627.

Bukvalno sam samo izbrisao linije gdje se provjerava je li desktop kompozitovan (zahvaljujući poznatim, istim imenima kao i za Python GObject veze). Pogodio sam iz prvog puta. Xfce4-notifyd notifikacije su nestajale odjednom, bez sopstevnog, neovisnog fade-outa.

:::diff
--- xfce4-notifyd-0.2.4/xfce4-notifyd/xfce-notify-window.c  2013-04-21 16:42:08.000000000 +0200
+++ xfce-notify-window.c    2016-05-09 17:47:19.730137584 +0200
@@ -631,18 +631,9 @@

     window->expire_id = 0;

-    fade_transparent =
-        gdk_screen_is_composited(gtk_window_get_screen(GTK_WINDOW(window)));
-
-    if(fade_transparent) {
-        window->fade_id = g_timeout_add(FADE_CHANGE_TIMEOUT,
-                                        xfce_notify_window_fade_timeout,
-                                        window);
-    } else {
-        /* it might be 800ms early, but that's ok */
-        g_signal_emit(G_OBJECT(window), signals[SIG_CLOSED], 0,
-                      XFCE_NOTIFY_CLOSE_REASON_EXPIRED);
-    }
+    /* it might be 800ms early, but that's ok */
+    g_signal_emit(G_OBJECT(window), signals[SIG_CLOSED], 0,
+                    XFCE_NOTIFY_CLOSE_REASON_EXPIRED);

     return FALSE;
 }