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.