[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),
>K_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