[Xfce4-commits] [apps/xfce4-notifyd] 01/04: Add a slide-out animation to fadeout

noreply at xfce.org noreply at xfce.org
Thu Sep 7 00:40:49 CEST 2017


This is an automated email from the git hooks/post-receive script.

o   c   h   o   s   i       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-notifyd.

commit 87ed54c043e07ee5487b16abe3f7f932f75c62d5
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Wed Sep 6 00:21:47 2017 +0200

    Add a slide-out animation to fadeout
---
 xfce4-notifyd/xfce-notify-daemon.c |  1 +
 xfce4-notifyd/xfce-notify-window.c | 29 ++++++++++++++++++++++++++++-
 xfce4-notifyd/xfce-notify-window.h |  2 ++
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/xfce4-notifyd/xfce-notify-daemon.c b/xfce4-notifyd/xfce-notify-daemon.c
index 6c6cfa2..87d5bff 100644
--- a/xfce4-notifyd/xfce-notify-daemon.c
+++ b/xfce4-notifyd/xfce-notify-daemon.c
@@ -1306,6 +1306,7 @@ notify_notify (XfceNotifyGBus *skeleton,
     xfce_notify_window_set_icon_only(window, x_canonical);
 
     xfce_notify_window_set_do_fadeout(window, xndaemon->do_fadeout);
+    xfce_notify_window_set_notify_location(window, xndaemon->notify_location);
 
     if(value_hint_set)
         xfce_notify_window_set_gauge_value(window, value_hint, xndaemon->css_provider);
diff --git a/xfce4-notifyd/xfce-notify-window.c b/xfce4-notifyd/xfce-notify-window.c
index e63b693..9cd0246 100644
--- a/xfce4-notifyd/xfce-notify-window.c
+++ b/xfce4-notifyd/xfce-notify-window.c
@@ -55,6 +55,7 @@ struct _XfceNotifyWindow
     gboolean mouse_hover;
 
     gdouble normal_opacity;
+    gint original_x, original_y;
 
     guint32 icon_only:1,
             has_summary_text:1,
@@ -75,6 +76,7 @@ struct _XfceNotifyWindow
     guint op_change_steps;
     gdouble op_change_delta;
     gboolean do_fadeout;
+    GtkCornerType notify_location;
 };
 
 typedef struct
@@ -291,7 +293,6 @@ xfce_notify_window_start_expiration(XfceNotifyWindow *window)
                                           xfce_notify_window_expire_timeout,
                                           window);
     }
-
     gtk_widget_set_opacity(GTK_WIDGET(window), window->normal_opacity);
 }
 
@@ -526,6 +527,8 @@ xfce_notify_window_enter_leave(GtkWidget *widget,
             if(window->fade_id) {
                 g_source_remove(window->fade_id);
                 window->fade_id = 0;
+                /* reset the sliding-out window to its original position */
+                gtk_window_move (GTK_WINDOW (window), window->original_x, window->original_y);
             }
         }
         gtk_widget_set_opacity(GTK_WIDGET(widget), 1.0);
@@ -582,6 +585,8 @@ xfce_notify_window_expire_timeout(gpointer data)
         gdk_screen_is_composited(gtk_window_get_screen(GTK_WINDOW(window)));
 
     if(fade_transparent && window->do_fadeout) {
+        /* remember the original position of the window before we slide it out */
+        gtk_window_get_position (GTK_WINDOW (window), &window->original_x, &window->original_y);
         window->fade_id = g_timeout_add(FADE_CHANGE_TIMEOUT,
                                         xfce_notify_window_fade_timeout,
                                         window);
@@ -599,9 +604,23 @@ xfce_notify_window_fade_timeout(gpointer data)
 {
     XfceNotifyWindow *window = data;
     gdouble op;
+    gint x, y;
 
     g_return_val_if_fail(XFCE_IS_NOTIFY_WINDOW(data), FALSE);
 
+    /* slide out animation */
+    gtk_window_get_position (GTK_WINDOW (window), &x, &y);
+    if (window->notify_location == GTK_CORNER_TOP_RIGHT ||
+        window->notify_location == GTK_CORNER_BOTTOM_RIGHT)
+        x = x + 10;
+    else if (window->notify_location == GTK_CORNER_TOP_LEFT ||
+             window->notify_location == GTK_CORNER_BOTTOM_LEFT)
+        x = x - 10;
+    else
+        g_warning("Invalid notify location: %d", window->notify_location);
+    gtk_window_move (GTK_WINDOW (window), x, y);
+
+    /* fade-out animation */
     op = gtk_widget_get_opacity(GTK_WIDGET(window));
     op -= window->op_change_delta;
     if(op < 0.0)
@@ -1128,6 +1147,14 @@ xfce_notify_window_set_do_fadeout(XfceNotifyWindow *window,
     window->do_fadeout = do_fadeout;
 }
 
+void xfce_notify_window_set_notify_location(XfceNotifyWindow *window,
+                                            GtkCornerType notify_location)
+{
+    g_return_if_fail(XFCE_IS_NOTIFY_WINDOW(window));
+
+    window->notify_location = notify_location;
+}
+
 void
 xfce_notify_window_closed(XfceNotifyWindow *window,
                           XfceNotifyCloseReason reason)
diff --git a/xfce4-notifyd/xfce-notify-window.h b/xfce4-notifyd/xfce-notify-window.h
index 452baec..093717c 100644
--- a/xfce4-notifyd/xfce-notify-window.h
+++ b/xfce4-notifyd/xfce-notify-window.h
@@ -103,6 +103,8 @@ void xfce_notify_window_unset_gauge_value(XfceNotifyWindow *window);
 void xfce_notify_window_set_do_fadeout(XfceNotifyWindow *window,
                                        gboolean do_fadeout);
 
+void xfce_notify_window_set_notify_location(XfceNotifyWindow *window,
+                                            GtkCornerType notify_location);
 /* signal trigger */
 void xfce_notify_window_closed(XfceNotifyWindow *window,
                                XfceNotifyCloseReason reason);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list