Ein bisschen spät, aber ich wollte auch dies tun, und ich habe es meistens funktioniert. Es deckt nicht alle Fälle ab, in denen Sie erwarten, dass ein Client seine Titelleiste anzeigt oder versteckt, aber es ist nahe genug für meinen Anwendungsfall. Es ist ziemlich einfach, zuerst müssen Titelleisten für jeden Client deaktiviert werden, fügen Sie also titlebars_enabled = false
in den Eigenschaften der Standardregel für alle Clients hinzu.
Wenn dann ein Client schwebt, müssen Sie seine Titelleiste umschalten und sie ausschalten, wenn sie aufhört zu schweben.
Ich schrieb diese kleine Hilfsfunktion, um den Code klarer zu machen. Es ist ziemlich einfach, wenn s
true
dann die Leiste anzeigen, verstecken Sie es andernfalls. Aber es gibt einen Haken, in unserem Fall hatten die Fenster nie eine Titelleiste, also ist es noch nicht erstellt. Wir senden das Signal, für uns eine gebaut zu haben, wenn die aktuelle leer ist.
-- Toggle titlebar on or off depending on s. Creates titlebar if it doesn't exist
local function setTitlebar(client, s)
if s then
if client.titlebar == nil then
client:emit_signal("request::titlebars", "rules", {})
end
awful.titlebar.show(client)
else
awful.titlebar.hide(client)
end
end
Jetzt können wir die Eigenschaftsänderung Haken:
--Toggle titlebar on floating status change
client.connect_signal("property::floating", function(c)
setTitlebar(c, c.floating)
end)
Aber das gilt nur für Kunden, die Staaten, nachdem sie erstellt ändert. Wir brauchen einen Haken für neue Kunden, die Schwimm- oder in einem schwebenden Tag geboren sind:
-- Hook called when a client spawns
client.connect_signal("manage", function(c)
setTitlebar(c, c.floating or c.first_tag.layout == awful.layout.suit.floating)
end)
Und schließlich, wenn das aktuelle Layout schwebt, Kunden nicht über die Floating-Eigenschaft festgelegt, also müssen wir ein hinzufügen Haken für Layoutänderungen, um die Titelleisten auf den Clients hinzuzufügen.
-- Show titlebars on tags with the floating layout
tag.connect_signal("property::layout", function(t)
-- New to Lua ?
-- pairs iterates on the table and return a key value pair
-- I don't need the key here, so I put _ to ignore it
for _, c in pairs(t:clients()) do
if t.layout == awful.layout.suit.floating then
setTitlebar(c, true)
else
setTitlebar(c, false)
end
end
end)
Ich möchte nicht auf diese zu viel Zeit damit verbringen, damit es nicht Fälle, in denen ein Kunde in einem schwebenden Layout markiert wird, oder wenn ein Client mehrfach markiert ist und einer dieser Tag ist schwebend.
es scheint, dass dies nur für neue Clients und nicht für Clients gelten würde, die ich von gefliest zu Floating wechseln? – Juicy
In diesem Fall müssen Sie sowohl 'property :: floating' (' client.connec_signal ("property :: floating", function (c) ... end') als auch das Tag 'property :: layout' verbinden (und für alle sichtbaren Clients) Dann schalte Titlebars auf sie. Aber pass auf, du wirst https://github.com/awesomeWM/awesome/issues/1588 treffen, es bricht die Funktion nicht, aber funktioniert nur wenn Der Kunde hatte irgendwann eine Titelleiste. –