Prešao sam na Wayland. Umjesto Openboxa na Xorg-u,
sad koristim Labwc na Waylandu. Polako premještam
sve postavke koje su se nakupile nakon godina korištenja i tražim adekvatna
rješenja za, na Openboxu, već rješene probleme.
Jedna od tih je automatsko uklanjanje prozorske trake (dekoracije) kod
maksimizirani prozora. Za to sam koristio Orcsome.
Nažalost, nešto slično Orcsomeu ne postoji trenutno unutar samog
Labwca ili uopšteno za Wayland kompzitore.
Za sad sam koristio Labwc konfiguraciju koja bi uklonila dekoracije
kad god se klikne na "maximize" dugme prozora i također kad uvećam
prozor pomoću prečice na tastaturi. Funkcionisalo je, ali je nerviralo
što svaki prozor koji otvorim, moram ručno pritisnuti prečicu na tastaturi,
jer pri pokretanju, iako su maksimizirani, još uvijek su imali prozornu
traku. Pokušao sam i globalno pravilo unutar Labwca koje bi pokrenulo
svaki program maksimiziran i sa uklonjenom prozornom trakom, a za
pojedine programe koje ne želim maksimizirane bi dodao izuzetak unutar
konfiguracionog fajla. Naravno, to je neidealno rješenje, jer svaki
put moram dodavati nove programe u iznimke i voditi brigu o listi.
Evo kako je izgledalo otprilike. Prvi primjer je za uklonjanje dekoracije
pri pritisku na maximize dugme.
<context name="Maximize">
<mousebind button="Left" action="Click">
<action name="ToggleMaximize" />
<action name="SetDecorations" decorations="none" forceSSD="no" />
</mousebind>
...
</context>
Drugi primjer pri korištenju kombinacije tipki na tastaturi.
<keybind key="W-Page_Up">
<action name="Maximize"/>
<action name="SetDecorations" decorations="none" forceSSD="no" />
</keybind>
Labwc nativno rješenje
Uz pomoć, iako je u ovom primjeru pomoć blago rečeno jer gotovo sav posao
je uradila UI (umjetna inteligencija), sam sklopio
patch za Labwc. Svaki
prozor koji se pokrene uvećan, gubi prozornu traku. Prozori koji nisu
namješteni ili upamtili da krenu uvećani, zadrže traku.
Na moje iznenađenje je radilo iz prvog pokušaja. Iako nemam nikakvo
poznavanje C programskog jezika, niti Labwc projekta, uspijelo je
dodati par kratkih izmjena da bi se postigla željena funkcija.
Patch:
diff --git a/include/view.h b/include/view.h
index 0ff42c85..43a4d4f0 100644
--- a/include/view.h
+++ b/include/view.h
@@ -209,6 +209,9 @@ struct view {
bool inhibits_keybinds;
xkb_layout_index_t keyboard_layout;
+ bool saved_ssd_enabled;
+ bool saved_decoration_state_valid;
+
/* Pointer to an output owned struct region, may be NULL */
struct region *tiled_region;
/* Set to region->name when tiled_region is free'd by a destroying output */
diff --git a/src/view.c b/src/view.c
index e17a883c..1e86e3e3 100644
--- a/src/view.c
+++ b/src/view.c
@@ -1265,7 +1265,15 @@ view_apply_maximized_geometry(struct view *view)
{
assert(view);
assert(view->maximized != VIEW_AXIS_NONE);
+
+ if (!view->saved_decoration_state_valid) {
+ view->saved_ssd_enabled = view->ssd_enabled;
+ view->saved_decoration_state_valid = true;
+ }
+
+ view->ssd_enabled = false;
struct output *output = view->output;
+
assert(output_is_usable(output));
struct wlr_box box = output_usable_area_in_layout_coords(output);
@@ -1365,6 +1373,10 @@ view_restore_to(struct view *view, struct wlr_box geometry)
return;
}
if (view->maximized != VIEW_AXIS_NONE) {
+ if (view->saved_decoration_state_valid) {
+ view->ssd_enabled = view->saved_ssd_enabled;
+ view->saved_decoration_state_valid = false;
+ }
set_maximized(view, VIEW_AXIS_NONE);
}
view_move_resize(view, geometry);
@@ -2492,6 +2504,7 @@ void
view_init(struct view *view)
{
assert(view);
+ view->saved_decoration_state_valid = false;
wl_signal_init(&view->events.new_app_id);
wl_signal_init(&view->events.new_title);
Korisnici Arch Linuxa mogu koristiti moj PKGBUILD
da isprobaju. Treba imati na umu da ovo radi za trenutnu verziju
Labwca, ne znam da li ću ažurirati patch za svaku sljedeću. Nadam se
da će ovo postati dio Labwca.
Komentari