abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:33 | Komunita

    Fedora 40 release party v Praze proběhne v pátek 17. května od 18:30 v prostorách společnosti Etnetera Core na adrese Jankovcova 1037/49, Praha 7. Součástí bude program kratších přednášek o novinkách ve Fedoře.

    Ladislav Hagara | Komentářů: 1
    včera 21:11 | IT novinky

    Stack Overflow se dohodl s OpenAI o zpřístupnění obsahu Stack Overflow pro vylepšení OpenAI AI modelů.

    Ladislav Hagara | Komentářů: 0
    včera 17:55 | Nová verze

    AlmaLinux byl vydán v nové stabilní verzi 9.4 (Mastodon, 𝕏). S kódovým názvem Seafoam Ocelot. Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 17:11 | IT novinky

    Před 50 lety, 5. května 1974 v žurnálu IEEE Transactions on Communications, Vint Cerf a Bob Kahn popsali protokol TCP (pdf).

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | Zajímavý článek

    Bylo vydáno do češtiny přeložené číslo 717 týdeníku WeeklyOSM přinášející zprávy ze světa OpenStreetMap.

    Ladislav Hagara | Komentářů: 0
    včera 04:00 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.10.38 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 5
    včera 00:22 | Komunita

    Google zveřejnil seznam 1220 projektů od 195 organizací (Debian, GNU, openSUSE, Linux Foundation, Haiku, Python, …) přijatých do letošního, již dvacátého, Google Summer of Code.

    Ladislav Hagara | Komentářů: 2
    5.5. 22:22 | IT novinky

    Na základě DMCA požadavku bylo na konci dubna z GitHubu odstraněno 8535 repozitářů se zdrojovými kódy open source emulátoru přenosné herní konzole Nintendo Switch yuzu.

    Ladislav Hagara | Komentářů: 7
    5.5. 00:33 | Nová verze

    Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.1.0. Po devíti letech od vydání předchozí verze 3.0.5. Doména dillo.org již nepatří vývojářům Dilla.

    Ladislav Hagara | Komentářů: 0
    4.5. 15:00 | Komunita

    O víkendu probíhá v Bostonu, a také virtuálně, konference LibrePlanet 2024 organizovaná nadací Free Software Foundation (FSF).

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (63%)
     (8%)
     (15%)
     (14%)
    Celkem 119 hlasů
     Komentářů: 8, poslední 4.5. 08:25
    Rozcestník

    Awesome wm a umistovani oken

    14.10.2011 22:25 | Přečteno: 1245× | poslední úprava: 14.10.2011 22:48

    V mém posledním zveřejněném desktopu jsem si povzdechl nad tím, že mi Awesome v3.4.10 umísťuje firefox při plovoucím režimu o pár pixel přes horní wibox.

    Nebudu tu příliš rozvádět jak to funguje, protože jsem se moc o problematiku signálů nezajímal - nebyl čas, tak tedy:

    client.add_signal("manage", function (c, startup)

    if not startup then
    -- Set the windows at the slave,
    -- i.e. put it at the end of others instead of setting it master.
    awful.client.setslave(c)

    -- Put windows in a smart way, only if they does not set an initial position.
    if not c.size_hints.user_position and not c.size_hints.program_position then

    awful.placement.no_offscreen(c)
    awful.placement.no_overlap(c)
    end
    end
    end)

    Tato funkce/signál se mi stará o nové okna. V podstatě jde o to správně umístit okno na viditelnou plochu obrazovky a také aby nedošlo k překrytí. Hlavně maximalizovaný floating firefox či codeblocks o pár px překryly horní wibox o výšce 14px. Zjistil jsem, že za to může funkce no_offscreen() ve které byla chyba (feature?) v nastavování pozice okna v případě, že přesahuje maximální viditelnou šířku / výšku :

    function no_offscreen(c)
    local c = c or capi.client.focus
    local geometry = c:geometry()
    local border = c.border_width
    local screen_geometry = capi.screen[c.screen].workarea

    if geometry.x + geometry.width + 2*border > screen_geometry.x + screen_geometry.width then
    -- geometry.x = screen_geometry.x + screen_geometry.width - geometry.width -- original , chybi odecet borderu
    geometry.x = screen_geometry.x + screen_geometry.width - (geometry.width - 2*border)
    elseif geometry.x < screen_geometry.x then
    geometry.x = screen_geometry.x
    end

    if geometry.y + geometry.height + border > screen_geometry.y + screen_geometry.height then -- proc jen 1x border? radej nebudu patrat
    -- geometry.y = screen_geometry.y + screen_geometry.height - geometry.height -- to same chybi border odecet
    geometry.y = screen_geometry.y + screen_geometry.height - (geometry.height- 2*border)
    elseif geometry.y < screen_geometry.y then
    geometry.y = screen_geometry.y
    end
    -- c:geometry(geometry) -- v originale chybi return wtf?
    return c:geometry(geometry) -- uprava luta
    end

    Jak je vidět, úprava byla elementární i pro člověka co programuje v C embedded a Lua umí jen editovat z rychlíku :-)

    Doufám, že to třeba někdy někomu pomůže a doufám, že se kvůli této úpravě neobjeví další chyba / feature :-D

    A ještě dotaz pro odborníky v Awesome: Je tohle na bugreport ? Nějak nemám čas zjišťovat, jestli to není jen můj osobní workaround a ve výsledku bych se třeba jen ztrapnil :-D


    Jak jsem teď dodatečně zjistil, chyba bude ještě někde jinde, protože je nutno donutit okno větší, než je plocha, aby nepřesahovalo. To by ovšem měla řešit funkce no_overlap..patrně to ale neřeší dokonale, neboť firefox o pár pixel přesahuje spodek obrazovky a pomůže až toggle maximize..

           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    luta avatar 14.10.2011 22:56 luta | skóre: 20 | blog: muj_blok | Prostějov/Brno
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken

    ps mám to celé blbě, žádný bugreport nebude :-D ale štvě mě to :-(

    juraj-bit avatar 14.10.2011 23:25 juraj-bit | skóre: 14 | blog: X BLOG X | Bratislava
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken
    Ja to mám vpodstate tak isto (Debian Wheezy) placement.lua :
    function no_offscreen(c)
        local c = c or capi.client.focus
        local geometry = c:geometry()
        local border = c.border_width
        local screen_geometry = capi.screen[c.screen].workarea
    
        if geometry.x + geometry.width + 2*border > screen_geometry.x + screen_geometry.width then
            geometry.x = screen_geometry.x + screen_geometry.width - geometry.width
        elseif geometry.x < screen_geometry.x then
            geometry.x = screen_geometry.x
        end
    
        if geometry.y + geometry.height + border > screen_geometry.y + screen_geometry.height then
            geometry.y = screen_geometry.y + screen_geometry.height - geometry.height
        elseif geometry.y < screen_geometry.y then
            geometry.y = screen_geometry.y
        end
    
        c:geometry(geometry)
    end
    

    Nepozorujem prekrytie horného panela ami presah okna cez dolný okraj pri maximalizovaní Firefoxu. Fullscreen mám zakomentovaný.

    luta avatar 14.10.2011 23:38 luta | skóre: 20 | blog: muj_blok | Prostějov/Brno
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken

    já nevím přesně jak to popsat. Nakonec to vypadá, že tam chyběl jen ten return v té funkci. Dále jsem si dopsal funkci, která mi testuje velikost okna a pokud je okno zaručeně větší jak obrazovka, tak ho zmenší. Tohle asi ani jedna z těch funkcí nedělala. Takže výsledek vypadá nějako takto :

    function w_resize(c)
    local geometry = c:geometry()
    local border = c.border_width
    local screen_geometry = screen[c.screen].workarea

    if geometry.width + 2*border > screen_geometry.width then
    geometry.width = screen_geometry.width
    end
    if geometry.height + 2*border > screen_geometry.height then
    geometry.height = screen_geometry.height
    end

    return c:geometry(geometry)
    end


    -- {{{ Signals
    -- Signal function to execute when a new client appears.
    client.add_signal("manage", function (c, startup)

    w_resize(c)

    if not startup then
    -- Set the windows at the slave,
    -- i.e. put it at the end of others instead of setting it master.
    awful.client.setslave(c)

    -- Put windows in a smart way, only if they does not set an initial position.
    if not c.size_hints.user_position and not c.size_hints.program_position then

    awful.placement.no_offscreen(c)
    awful.placement.no_overlap(c)
    end
    end
    end)

    tak nějak to zatím funguje, než zase najdou nějakou chybu

    juraj-bit avatar 14.10.2011 23:58 juraj-bit | skóre: 14 | blog: X BLOG X | Bratislava
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken
    Tá fukcia w_resize(c) sa bude niekedy možno hodiť, zatial som ju nepotreboval.
    luta avatar 15.10.2011 00:02 luta | skóre: 20 | blog: muj_blok | Prostějov/Brno
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken

    trochu je v ní pořád bordel s těma borderama, protože netuším, jak s tím awesome počítá (jestli je už v geometry započítano), ale funguje to. Tenhle detail mě opravdu dlouho štval

    juraj-bit avatar 15.10.2011 00:25 juraj-bit | skóre: 14 | blog: X BLOG X | Bratislava
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken

    Toto

    awful.client.setslave(c)

    mám zakomentované

    -- awful.client.setslave(c)
    luta avatar 15.10.2011 00:32 luta | skóre: 20 | blog: muj_blok | Prostějov/Brno
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken

    setslave startuje nove okno jako slave a ne master. to mam tak schvalne

    juraj-bit avatar 15.10.2011 00:38 juraj-bit | skóre: 14 | blog: X BLOG X | Bratislava
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken
    Pozeral som najnovšte témy a čistá práca so signálmi bez commentov vyzerá takto:
    -- SIGNALS
    client.add_signal("manage", function (c, startup)
    	if not startup then
    		if not c.size_hints.user_position and not c.size_hints.program_position then
    			awful.placement.no_overlap(c)
    			awful.placement.no_offscreen(c)
    		end
    	end
    end)
    
    client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
    client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
    
    
    Ešte sa mi nestalo, aby sa mi niektoré okno zobrazilo nekorektne, skúšal som všetky graf. programy, ktoré mám nainštalované, až teda na Gimp, ktorý sa mi otvára maximalizovaný a ovládacie panely mi prekrýva hlavné okno, vpodstate mi to ale tak aj vyhovuje, lebo pár pixelov z nich je vidieť..
    luta avatar 15.10.2011 00:50 luta | skóre: 20 | blog: muj_blok | Prostějov/Brno
    Rozbalit Rozbalit vše Re: Awesome wm a umistovani oken

    ja mel problem hlavne s floating layoutem. kazdopadne diky. btw gimp mi taky konecne startuje korektne. protoze mam wibox jen 14px vysoky tak nemam rad kdyz mi ho neco prekryva

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.