[Xfce4-commits] <xfce4-notifyd:master> implement x-canonical-private-icon-only

Brian J. Tarricone noreply at xfce.org
Sat Oct 31 11:12:02 CET 2009


Updating branch refs/heads/master
         to f756d429ce3737874b9e8eb32791520cce871320 (commit)
       from 29954e68952a0a5550f467e88480453afa6bbbfe (commit)

commit f756d429ce3737874b9e8eb32791520cce871320
Author: Brian J. Tarricone <brian at tarricone.org>
Date:   Sat Oct 31 02:17:51 2009 -0700

    implement x-canonical-private-icon-only
    
    this is a special layout by canonical that shows just the icon, centered
    in the notification.  we add extra pading to the left and right to make
    the notification more visible.

 xfce4-notifyd/xfce-notify-daemon.c |    8 ++++++-
 xfce4-notifyd/xfce-notify-window.c |   43 +++++++++++++++++++++++++++++++++--
 xfce4-notifyd/xfce-notify-window.h |    3 ++
 3 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/xfce4-notifyd/xfce-notify-daemon.c b/xfce4-notifyd/xfce-notify-daemon.c
index 5be3b1a..749865c 100644
--- a/xfce4-notifyd/xfce-notify-daemon.c
+++ b/xfce4-notifyd/xfce-notify-daemon.c
@@ -276,7 +276,7 @@ notify_get_capabilities(XfceNotifyDaemon *xndaemon,
 {
     gint i = 0;
 
-    *OUT_capabilities = g_new(gchar *, 6);
+    *OUT_capabilities = g_new(gchar *, 7);
     (*OUT_capabilities)[i++] = g_strdup("actions");
     (*OUT_capabilities)[i++] = g_strdup("body");
     (*OUT_capabilities)[i++] = g_strdup("body-markup");
@@ -284,6 +284,7 @@ notify_get_capabilities(XfceNotifyDaemon *xndaemon,
     (*OUT_capabilities)[i++] = g_strdup("body-hyperlinks");
 #endif
     (*OUT_capabilities)[i++] = g_strdup("icon-static");
+    (*OUT_capabilities)[i++] = g_strdup("x-canonical-private-icon-only");
     (*OUT_capabilities)[i++] = NULL;
 
     return TRUE;
@@ -398,6 +399,11 @@ notify_notify(XfceNotifyDaemon *xndaemon,
         }
     }
 
+    if(g_hash_table_lookup(hints, "x-canonical-private-icon-only"))
+        xfce_notify_window_set_icon_only(window, TRUE);
+    else
+        xfce_notify_window_set_icon_only(window, FALSE);
+
     gtk_widget_realize(GTK_WIDGET(window));
     xfce_notify_daemon_window_size_allocate(GTK_WIDGET(window),
                                             &GTK_WIDGET(window)->allocation,
diff --git a/xfce4-notifyd/xfce-notify-window.c b/xfce4-notifyd/xfce-notify-window.c
index 7db67d4..f235442 100644
--- a/xfce4-notifyd/xfce-notify-window.c
+++ b/xfce4-notifyd/xfce-notify-window.c
@@ -55,11 +55,14 @@ struct _XfceNotifyWindow
     cairo_path_t *close_btn_path;
     GdkRegion *close_btn_region;
 
-    gboolean fade_transparent;
     gdouble normal_opacity;
 
+    guint32 fade_transparent:1,
+            icon_only:1;
+
     GtkWidget *icon_box;
     GtkWidget *icon;
+    GtkWidget *content_box;
     GtkWidget *summary;
     GtkWidget *body;
     GtkWidget *button_box;
@@ -240,7 +243,7 @@ xfce_notify_window_init(XfceNotifyWindow *window)
     gtk_widget_show(window->icon);
     gtk_container_add(GTK_CONTAINER(align), window->icon);
 
-    vbox = gtk_vbox_new(FALSE, BORDER);
+    window->content_box = vbox = gtk_vbox_new(FALSE, BORDER);
     gtk_container_set_border_width(GTK_CONTAINER(vbox), 0);
     gtk_widget_show(vbox);
     gtk_box_pack_start(GTK_BOX(tophbox), vbox, TRUE, TRUE, 0);
@@ -1187,7 +1190,7 @@ xfce_notify_window_set_fade_transparent(XfceNotifyWindow *window,
     if(fade_transparent == window->fade_transparent)
         return;
 
-    window->fade_transparent = fade_transparent;
+    window->fade_transparent = !!fade_transparent;
 
     /* if we're already realized, we don't actually do anything here */
 }
@@ -1226,6 +1229,40 @@ xfce_notify_window_get_opacity(XfceNotifyWindow *window)
 }
 
 void
+xfce_notify_window_set_icon_only(XfceNotifyWindow *window,
+                                 gboolean icon_only)
+{
+    g_return_if_fail(XFCE_IS_NOTIFY_WINDOW(window));
+
+    if(icon_only == window->icon_only)
+        return;
+
+    window->icon_only = !!icon_only;
+
+    if(icon_only) {
+        GtkRequisition req;
+
+        if(!GTK_WIDGET_VISIBLE(window->icon_box)) {
+            g_warning("Attempt to set icon-only mode with no icon");
+            return;
+        }
+
+        gtk_widget_hide(window->content_box);
+
+        /* set a wider size on the icon box so it takes up more space */
+        gtk_widget_realize(window->icon);
+        gtk_widget_size_request(window->icon, &req);
+        gtk_widget_set_size_request(window->icon_box, req.width * 4, -1);
+        /* and center it */
+        gtk_alignment_set(GTK_ALIGNMENT(window->icon_box), 0.5, 0.0, 0.0, 0.0);
+    } else {
+        gtk_alignment_set(GTK_ALIGNMENT(window->icon_box), 0.0, 0.0, 0.0, 0.0);
+        gtk_widget_set_size_request(window->icon_box, -1, -1);
+        gtk_widget_show(window->content_box);
+    }
+}
+
+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 562906d..f0fad4d 100644
--- a/xfce4-notifyd/xfce-notify-window.h
+++ b/xfce4-notifyd/xfce-notify-window.h
@@ -77,6 +77,9 @@ void xfce_notify_window_set_opacity(XfceNotifyWindow *window,
                                     gdouble opacity);
 gdouble xfce_notify_window_get_opacity(XfceNotifyWindow *window);
 
+void xfce_notify_window_set_icon_only(XfceNotifyWindow *window,
+                                      gboolean icon_only);
+
 /* signal trigger */
 void xfce_notify_window_closed(XfceNotifyWindow *window,
                                XfceNotifyCloseReason reason);



More information about the Xfce4-commits mailing list