naughty: Use same object when the remote source request a replacement

Previously, it would create a new object. The leaves the old
`replaces_id` logic mostly intact for now to keep the full backward
compatibility. I don't think anybody would have noticed the changed, by
time and time again we had proof that some silent users have some
amazing and advanced code hidden somewhere. It could be cleaned later
when breaking compatibility isn't an issue.
This commit is contained in:
Emmanuel Lepage Vallee 2017-08-13 21:21:01 -04:00
parent b11582ad15
commit e13b9a48ff
2 changed files with 19 additions and 32 deletions

View File

@ -73,6 +73,9 @@ local function sendNotificationClosed(notificationId, reason)
end end
end end
-- This allow notification to be upadated later.
local counter = 1
local function convert_icon(w, h, rowstride, channels, data) local function convert_icon(w, h, rowstride, channels, data)
-- Do the arguments look sane? (e.g. we have enough data) -- Do the arguments look sane? (e.g. we have enough data)
local expected_length = rowstride * (h - 1) + w * channels local expected_length = rowstride * (h - 1) + w * channels
@ -201,10 +204,24 @@ capi.dbus.connect_signal("org.freedesktop.Notifications",
args.timeout = expire / 1000 args.timeout = expire / 1000
end end
args.freedesktop_hints = hints args.freedesktop_hints = hints
-- Try to update existing objects when possible
notification = naughty.get_by_id(replaces_id)
if notification then
for k, v in pairs(args) do
notification[k] = v
end
else
counter = counter+1
args.id = counter
notification = nnotif(args) notification = nnotif(args)
end
return "u", notification.id return "u", notification.id
end end
return "u", "0" counter = counter+1
return "u", counter
elseif data.member == "CloseNotification" then elseif data.member == "CloseNotification" then
local obj = naughty.get_by_id(appname) local obj = naughty.get_by_id(appname)
if obj then if obj then

View File

@ -57,10 +57,6 @@ screen.connect_for_each_screen(function(s)
} }
end) end)
-- Counter for the notifications
-- Required for later access via DBUS
local counter = 1
--- Evaluate desired position of the notification by index - internal --- Evaluate desired position of the notification by index - internal
-- --
-- @param s Screen to use -- @param s Screen to use
@ -342,28 +338,6 @@ function naughty.default_notification_handler(notification, args)
local opacity = args.opacity or preset.opacity or local opacity = args.opacity or preset.opacity or
beautiful.notification_opacity beautiful.notification_opacity
-- replace notification if needed
local reuse_box
if args.replaces_id then
local obj = naughty.get_by_id(args.replaces_id)
if obj then
-- destroy this and ...
naughty.destroy(obj, naughty.notification_closed_reason.silent, true)
reuse_box = obj.box
end
-- ... may use its ID
if args.replaces_id <= counter then
notification.id = args.replaces_id
else
counter = counter + 1
notification.id = counter
end
else
-- get a brand new ID
counter = counter + 1
notification.id = counter
end
notification.position = position notification.position = position
-- hook destroy -- hook destroy
@ -515,10 +489,6 @@ function naughty.default_notification_handler(notification, args)
shape = shape, shape = shape,
type = "notification" }) type = "notification" })
if reuse_box then
notification.box = reuse_box
end
if hover_timeout then notification.box:connect_signal("mouse::enter", hover_destroy) end if hover_timeout then notification.box:connect_signal("mouse::enter", hover_destroy) end
notification.size_info = size_info notification.size_info = size_info