--- xfce4-notifyd-0.2.2/xfce4-notifyd/xfce-notify-daemon.c 2011-07-02 10:09:20.000000000 +0200 +++ xfce4-notifyd-0.2.2+dnd1/xfce4-notifyd/xfce-notify-daemon.c 2011-10-24 21:55:00.926350088 +0200 @@ -65,6 +65,8 @@ guint close_timeout; guint32 last_notification_id; + + gboolean dnd; }; typedef struct @@ -883,120 +885,120 @@ XfceNotifyWindow *window; GdkPixbuf *pix; GValue *urgency_data, *value_data; + if (!xndaemon->dnd) { + if((urgency_data = g_hash_table_lookup(hints, "urgency")) + && G_VALUE_HOLDS(urgency_data, G_TYPE_UCHAR) + && g_value_get_uchar(urgency_data) == URGENCY_CRITICAL) + { + /* don't expire urgent notifications */ + expire_timeout = 0; + } - if((urgency_data = g_hash_table_lookup(hints, "urgency")) - && G_VALUE_HOLDS(urgency_data, G_TYPE_UCHAR) - && g_value_get_uchar(urgency_data) == URGENCY_CRITICAL) - { - /* don't expire urgent notifications */ - expire_timeout = 0; - } - - if(expire_timeout == -1) - expire_timeout = xndaemon->expire_timeout; + if(expire_timeout == -1) + expire_timeout = xndaemon->expire_timeout; - if(replaces_id - && (window = g_tree_lookup(xndaemon->active_notifications, - GUINT_TO_POINTER(replaces_id)))) - { - xfce_notify_window_set_icon_name(window, app_icon); - xfce_notify_window_set_summary(window, summary); - xfce_notify_window_set_body(window, body); - xfce_notify_window_set_actions(window, actions); - xfce_notify_window_set_expire_timeout(window, expire_timeout); - xfce_notify_window_set_opacity(window, xndaemon->initial_opacity); + if(replaces_id + && (window = g_tree_lookup(xndaemon->active_notifications, + GUINT_TO_POINTER(replaces_id)))) + { + xfce_notify_window_set_icon_name(window, app_icon); + xfce_notify_window_set_summary(window, summary); + xfce_notify_window_set_body(window, body); + xfce_notify_window_set_actions(window, actions); + xfce_notify_window_set_expire_timeout(window, expire_timeout); + xfce_notify_window_set_opacity(window, xndaemon->initial_opacity); - *OUT_id = replaces_id; - } else { - window = XFCE_NOTIFY_WINDOW(xfce_notify_window_new_with_actions(summary, body, - app_icon, - expire_timeout, - actions)); - xfce_notify_window_set_opacity(window, xndaemon->initial_opacity); - - *OUT_id = xfce_notify_daemon_generate_id(xndaemon); - g_object_set_data(G_OBJECT(window), "--notify-id", - GUINT_TO_POINTER(*OUT_id)); - - g_tree_insert(xndaemon->active_notifications, - GUINT_TO_POINTER(*OUT_id), window); - - g_signal_connect(G_OBJECT(window), "action-invoked", - G_CALLBACK(xfce_notify_daemon_window_action_invoked), - xndaemon); - g_signal_connect(G_OBJECT(window), "closed", - G_CALLBACK(xfce_notify_daemon_window_closed), - xndaemon); - g_signal_connect(G_OBJECT(window), "size-allocate", - G_CALLBACK(xfce_notify_daemon_window_size_allocate), - xndaemon); - - gtk_widget_show(GTK_WIDGET(window)); - } - - if(!app_icon || !*app_icon) { - GValue *image_data = g_hash_table_lookup(hints, "image_data"); - if(!image_data) - image_data = g_hash_table_lookup(hints, "icon_data"); - if(image_data) { - pix = notify_pixbuf_from_image_data(image_data); - if(pix) { - xfce_notify_window_set_icon_pixbuf(window, pix); - g_object_unref(G_OBJECT(pix)); - } + *OUT_id = replaces_id; } else { - GValue *desktop_id = g_hash_table_lookup(hints, "desktop_id"); - if(desktop_id) { - gchar *resource = g_strdup_printf("applications%c%s.desktop", - G_DIR_SEPARATOR, - g_value_get_string(desktop_id)); - XfceRc *rcfile = xfce_rc_config_open(XFCE_RESOURCE_DATA, - resource, TRUE); - if(rcfile) { - if(xfce_rc_has_group(rcfile, "Desktop Entry")) { - const gchar *icon_file; - xfce_rc_set_group(rcfile, "Desktop Entry"); - icon_file = xfce_rc_read_entry(rcfile, "Icon", NULL); - if(icon_file) { - pix = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), - icon_file, - 32, - GTK_ICON_LOOKUP_FORCE_SIZE, - NULL); - - if(pix) { - xfce_notify_window_set_icon_pixbuf(window, pix); - g_object_unref(G_OBJECT(pix)); + window = XFCE_NOTIFY_WINDOW(xfce_notify_window_new_with_actions(summary, body, + app_icon, + expire_timeout, + actions)); + xfce_notify_window_set_opacity(window, xndaemon->initial_opacity); + + *OUT_id = xfce_notify_daemon_generate_id(xndaemon); + g_object_set_data(G_OBJECT(window), "--notify-id", + GUINT_TO_POINTER(*OUT_id)); + + g_tree_insert(xndaemon->active_notifications, + GUINT_TO_POINTER(*OUT_id), window); + + g_signal_connect(G_OBJECT(window), "action-invoked", + G_CALLBACK(xfce_notify_daemon_window_action_invoked), + xndaemon); + g_signal_connect(G_OBJECT(window), "closed", + G_CALLBACK(xfce_notify_daemon_window_closed), + xndaemon); + g_signal_connect(G_OBJECT(window), "size-allocate", + G_CALLBACK(xfce_notify_daemon_window_size_allocate), + xndaemon); + + gtk_widget_show(GTK_WIDGET(window)); + } + + if(!app_icon || !*app_icon) { + GValue *image_data = g_hash_table_lookup(hints, "image_data"); + if(!image_data) + image_data = g_hash_table_lookup(hints, "icon_data"); + if(image_data) { + pix = notify_pixbuf_from_image_data(image_data); + if(pix) { + xfce_notify_window_set_icon_pixbuf(window, pix); + g_object_unref(G_OBJECT(pix)); + } + } else { + GValue *desktop_id = g_hash_table_lookup(hints, "desktop_id"); + if(desktop_id) { + gchar *resource = g_strdup_printf("applications%c%s.desktop", + G_DIR_SEPARATOR, + g_value_get_string(desktop_id)); + XfceRc *rcfile = xfce_rc_config_open(XFCE_RESOURCE_DATA, + resource, TRUE); + if(rcfile) { + if(xfce_rc_has_group(rcfile, "Desktop Entry")) { + const gchar *icon_file; + xfce_rc_set_group(rcfile, "Desktop Entry"); + icon_file = xfce_rc_read_entry(rcfile, "Icon", NULL); + if(icon_file) { + pix = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), + icon_file, + 32, + GTK_ICON_LOOKUP_FORCE_SIZE, + NULL); + + if(pix) { + xfce_notify_window_set_icon_pixbuf(window, pix); + g_object_unref(G_OBJECT(pix)); + } } } + xfce_rc_close(rcfile); } - xfce_rc_close(rcfile); + g_free(resource); } - g_free(resource); } } - } - - 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); - - if((value_data = g_hash_table_lookup(hints, "value")) - && G_VALUE_HOLDS_INT(value_data)) - { - xfce_notify_window_set_gauge_value(window, g_value_get_int(value_data)); - } else - xfce_notify_window_unset_gauge_value(window); - gtk_widget_realize(GTK_WIDGET(window)); + 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); + + if((value_data = g_hash_table_lookup(hints, "value")) + && G_VALUE_HOLDS_INT(value_data)) + { + xfce_notify_window_set_gauge_value(window, g_value_get_int(value_data)); + } else + xfce_notify_window_unset_gauge_value(window); - /* Remove close timeout as we display a new notification */ - if(xndaemon->close_timeout) - g_source_remove(xndaemon->close_timeout); + gtk_widget_realize(GTK_WIDGET(window)); - xndaemon->close_timeout = 0; + /* Remove close timeout as we display a new notification */ + if(xndaemon->close_timeout) + g_source_remove(xndaemon->close_timeout); + xndaemon->close_timeout = 0; + } return TRUE; } @@ -1161,6 +1163,10 @@ xndaemon->notify_location = G_VALUE_TYPE(value) ? g_value_get_uint(value) : GTK_CORNER_TOP_RIGHT; + } else if(!strcmp(property, "/dnd")) { + xndaemon->dnd = G_VALUE_TYPE(value) + ? g_value_get_boolean(value) + : FALSE; } } @@ -1223,6 +1229,10 @@ "/initial-opacity", 0.9); + xndaemon->dnd = xfconf_channel_get_bool(xndaemon->settings, + "/dnd", + FALSE); + theme = xfconf_channel_get_string(xndaemon->settings, "/theme", "Default"); xfce_notify_daemon_set_theme(xndaemon, theme);