Closed pvonmoradi closed 5 months ago
I've tracked the issue a bit. Seems like the comparison routine where it is decided whether a notification is duplicated is handled here.
The measure for this comparison for icons is a char *
called icon_id
here.
The hashing is implemented in this PR: https://github.com/dunst-project/dunst/pull/586
But the only place where the hashing routine (icon_get_for_data
) is invoked is here via notification_icon_replace_data
.
I put a LOG_I there, it is never called.
I vaguely remember removing this functionality. I will have to look up later to see what it was about.
It hasn't been intentionally removed. It seems like for icons passed via path, the path is used as icon id. I don't think that's very bad, since only in very specific use cases this will make a difference. But you're right, before dunst used to hash the icon in that case. I think it'll be good to revert to the old behaviour.
It hasn't been intentionally removed. It seems like for icons passed via path, the path is used as icon id. I don't think that's very bad, since only in very specific use cases this will make a difference. But you're right, before dunst used to hash the icon in that case. I think it'll be good to revert to the old behaviour.
Late suggestion, but maybe a tuple of path and timestamp instead of hashing the whole file everytime?
You mean the timestamp of when the icon was changed on disk? Adding that timestamp should fix this issue yes
You mean the timestamp of when the icon was changed on disk? Adding that timestamp should fix this issue yes
the timestamp when we last loaded the icon, so that we can see if it was changed. Just like make does
Yeah sounds good
@fwsmit reading the icon code I noticed that the icon_id is never actually set or checked. Am I going crazy or is it the case?
Could be. It probably was used before. Iirc it contained the hash of the icon data.
I'll close this since right now this is working correctly
Issue description
In
notify-send --icon "/tmp/a.png" "summary" "title"
if/tmp/a.png
content is changed, dunst does not show the new image. It's as if it caches the path of the image or the combination of "summary" and "body" instead of also tracking hash of the icon file.From docs:
stack_duplicates (values: [true/false], default: true) If set to true, duplicate notifications will be stacked together instead of being displayed separately. Two notifications are considered duplicate if the name of the program that sent it, summary, body, icon and urgency are all identical.
Possibly this checks icon path instead of hash its of content
To reproduce:
/tmp/
notify-send --icon /tmp/b -t 20000 hi hello
mv /tmp/c /tmp/b
notify-send --icon /tmp/b -t 20000 hi hello
Installation info
v1.8.1
manual build
i3-gaps
This dunstrc does not contain icon path and colors.
Minimal dunstrc
```ini # See dunst(5) for all configuration options [global] ### Display ### # Which monitor should the notifications be displayed on. monitor = 0 # Display notification on focused monitor. Possible modes are: # mouse: follow mouse pointer # keyboard: follow window with keyboard focus # none: don't follow anything # # "keyboard" needs a window manager that exports the # _NET_ACTIVE_WINDOW property. # This should be the case for almost all modern window managers. # # If this option is set to mouse or keyboard, the monitor option # will be ignored. follow = mouse ### Geometry ### # dynamic width from 0 to 300 width = (0, 300) # constant width of 300 # width = 300 # The maximum height of a single notification, excluding the frame. height = 300 # Position the notification in the top right corner origin = top-right # Offset from the origin offset = 20x20 # Scale factor. It is auto-detected if value is 0. scale = 0 # Maximum number of notification (0 means no limit) notification_limit = 5 ### Progress bar ### # Turn on the progess bar. It appears when a progress hint is passed with # for example dunstify -h int:value:12 progress_bar = true # Set the progress bar height. This includes the frame, so make sure # it's at least twice as big as the frame width. progress_bar_height = 10 # Set the frame width of the progress bar progress_bar_frame_width = 1 # Set the minimum width for the progress bar progress_bar_min_width = 150 # Set the maximum width for the progress bar progress_bar_max_width = 300 # Show how many messages are currently hidden (because of # notification_limit). indicate_hidden = yes # The transparency of the window. Range: [0; 100]. # This option will only work if a compositing window manager is # present (e.g. xcompmgr, compiz, etc.). (X11 only) transparency = 0 # Draw a line of "separator_height" pixel height between two # notifications. # Set to 0 to disable. separator_height = 2 # Padding between text and separator. padding = 8 # Horizontal padding. horizontal_padding = 8 # Padding between text and icon. text_icon_padding = 0 # Defines width in pixels of frame around the notification window. # Set to 0 to disable. frame_width = 2 # Defines color of the frame around the notification window. frame_color = "#aaaaaa" # Define a color for the separator. # possible values are: # * auto: dunst tries to find a color fitting to the background; # * foreground: use the same color as the foreground; # * frame: use the same color as the frame; # * anything else will be interpreted as a X color. separator_color = frame # Sort messages by urgency. sort = yes # Don't remove messages, if the user is idle (no mouse or keyboard input) # for longer than idle_threshold seconds. # Set to 0 to disable. # A client can set the 'transient' hint to bypass this. See the rules # section for how to disable this if necessary idle_threshold = 120 ### Text ### font = Roboto Light 9 # The spacing between lines. If the height is smaller than the # font height, it will get raised to the font height. line_height = 0 # Possible values are: # full: Allow a small subset of html markup in notifications: # bold # italic #strikethrough# underline # # For a complete reference see #