-
Notifications
You must be signed in to change notification settings - Fork 274
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
labwc test #2563
Comments
If wlroots and labwc are built with Xwayland support, urxvt should work just fine, but then, you'd have to run |
I left off Xwayland support, on purpose - just for the exercise. |
So you'll see #2560 a lot :) I want to dedicate next week to an attempt to make Cage more similar to labwc: implement floating windows, but with JWM-like borders. When that is done, I want to get swaybg and some GTK+ 3 based panel+menu combo to work. |
Does #2534 reproduce under labwc? Maybe Cage's lack of support for the pointer constraints protocol is responsible for this. |
Running now with hacked Yes that bug #2560 is persistent, apparent in
Not much of a gamer 😨 here, but I can probably test it this weekend. |
Great job! I like labwc, quite well organised IMO. I've found a work-around, albeit very clumsy, for #2560 It involves side-note: Also ditched |
I'll put this here too, syntax for moving multi monitors with
Doesn't work in my autostart config (part of labwc), too early I think so I'll make another script for that. EDIT |
Some wayland friendly wwals - wayland compositor wallpaper setter New code in post below
- supports multi monitors with separate images
- shebang now #!/bin/bash - contains bashisms
- refactor and clean up code
- main guis moved to functions imgview - image viewer (part of woof and still works in X) #!/bin/bash
# a simple image viewer using gtkdialog and bash
# (c) Mick Amadio. 01micko@gmail.com, 2019-2021, GPLv2 (/usr/share/doc/legal)
set -e
###### initiate some vars
VER=0.1
TMR=${TMR:-3000} # slideshow interval
SLIDE=${SLIDE:-false}
SCALE=${SCALE:-2} # half screen x * y .. see XTRA var
DECO=true
HINT=
export PROG="$0"
export TMP=`mktemp -d /tmp/imgXXXXXX`
if [ -d "$1" ];then
CWD="$1"
elif [ -f "$1" ];then
if [ "`pwd`" != "$HOME" ];then
CWD="`pwd`"
else
echo "$1" | grep -q '^/' && CWD="${1%/*}"
fi
elif [ -z "$1" ];then
CWD="`pwd`"
fi
CONF="$HOME/.imgview.cfg"
export CWD TMR SCALE CONF SLIDE VER
MANUAL=true
[ "$SLIDE" == 'true' ] && MANUAL=false
cd "$CWD"
if [ "$XDG_SESSION_TYPE" = 'wayland' ]; then
a=`wlr-randr | grep -m1 'preferred' | grep -o '[0-9].*px' | sed 's/ px//'`
SCRX=${a%x*}
SCRY=${a#*x}
else
read DIMS SCRX SCRY ROOTVERT << EOF
`xwininfo -root | grep ' \-geometry ' | cut -f 1 -d '+' | tr 'x' ' '`
EOF
fi
if [ $SCRX -gt $(($SCRY * 3)) ];then # pretty safe to assume dual monitors
SCRX=$(($SCRX / 2))
fi
[ -f "$CONF" ] && . $CONF
if [ $SCALE -ge 4 ];then
XTRA="- 125" # used if pseudo fullscreen
DECO=false
HINT=
GEO="-G +1+1"
fi
VBOXX=$(($SCALE * $SCRX / 4))
VBOXY=$(($SCALE * $SCRY / 4 $XTRA))
PIXX=$(($VBOXX - 20))
PIXY=$(($VBOXY - 20))
###### functions
trap_exit() { # cleanup on exit or abort
rm -rf "$TMP"
cd - 2>&1 >/dev/null
}
splash() {
echo "<window title=\"Image Viewer\">
<vbox>
<frame>
<text use-markup=\"true\">
<label>\"<span fgcolor='darkgreen'><big><big><b>$1</b></big></big></span>\"</label>
</text>
</frame>
<hbox>
<button><label>Ok</label><input file stock=\"gtk-ok\"></input></button>
</hbox>
</vbox>
</window>" | gtkdialog -c -s
}
export -f splash
_help() {
HELP="$(gettext "Invoke imgview from the commandline inside a directory
with images, or set as your default application for image viewing.
Press Forward or Back to cycle through images.
Press Play to start a slide show or Stop to stop the slide show.
When there are many images in a directory start up may be slow.
Slide show speed and window size can be set in File > Preferences")"
gtkdialog-splash -bg "#FFD7D7" -icon gtk-help -close box -text "$HELP"
}
export -f _help
_prefs() {
export CFG="<window title=\"Image Viewer - preferences\" icon-name=\"gtk-preferences\">
<vbox><hbox>
<text use-markup=\"true\">
<label>\"<span fgcolor='darkblue'><big><big><b>Preferences for 'imgview'</b></big></big></span>\"</label>
</text>
</hbox>
<hbox space-expand=\"true\" space-fill=\"false\">
<vbox>
<text><label>Image Scale</label></text>
<spinbutton space-expand=\"true\" space-fill=\"false\" range-min=\"1\" range-max=\"4\" range-step=\"1\" xalign=\"1\" primary-icon-name=\"gtk-fullscreen\"
tooltip-text=\"'2' is the default, about half-screen size. '4' is pseudo fullscreen and 1 is small\">
<variable>scaling</variable>
<default>$SCALE</default>
</spinbutton>
<text><label>Slide Show Speed</label></text>
<spinbutton space-expand=\"true\" space-fill=\"false\" range-min=\"1000\" range-max=\"5000\" range-step=\"500\" xalign=\"1\" primary-icon-name=\"gtk-refresh\">
<variable>speed</variable>
<default>$TMR</default>
</spinbutton>
<checkbox tooltip-text=\"Start out with the Slide Show\">
<label>Start with Slide Show</label>
<variable>slideshow</variable>
<default>$SLIDE</default>
</checkbox>
</vbox>
</hbox>
<hbox>
<button><input file stock=\"gtk-cancel\"></input></button>
<button tooltip-text=\"$(gettext 'Save configuration')\">
<input file stock=\"gtk-save\"></input>
<action>exit:config</action>
</button>
</hbox>
</vbox>
</window>"
eval $(gtkdialog -c -p CFG)
if [ "$EXIT" = 'config' ];then
echo SCALE=$scaling > $CONF
echo TMR=$speed >> $CONF
echo SLIDE=$slideshow >> $CONF
splash "$(gettext 'The program will restart when you press OK for settings to take effect')"
GUIPID=$(while read a;do [ "${a##* }" = 'IMGGUI' ] && echo ${a%% *};done <<<$(ps|grep IMGGUI))
kill -9 $GUIPID 2>&1 >/dev/null && exec ${PROG##*/}
fi
}
export -f _prefs
copy_image() { # hacky way to support webp
OUT=$TMP/img
IN="$1"
case "$IN" in
*.webp|*.WEBP|*.WebP)
if ! which ffmpeg 2>&1 >/dev/null ;then
echo -n "${IN##*/}" > $TMP/current.txt && return 1
fi
ffmpeg -hide_banner -loglevel panic -i "$IN" $TMP/img.jpg
mv -f $TMP/img.jpg $OUT ;;
*.svgz)zcat -c "$IN" > $OUT ;; #compressed svg
*)
cp "$IN" $OUT ;;
esac
echo -n "${IN##*/}" > $TMP/current.txt
return 0
}
export -f copy_image
image_next() { # next image in queue, can be reversed
x=$1
y=1
while true;do
CUR=`cat $TMP/current.txt`
CUR=${CUR##*/}
z=0
NUM=$(while read -r c;do z=$(($z+1));[ "$CUR" = "$c" ] && echo $z && break;done < $TMP/list.txt)
case $x in
0)NUM=$(($NUM - 1));;
1)NUM=$(($NUM + 1));;
esac
if [ $NUM -le 0 ];then NUM=$TOT
elif [ $NUM -gt $TOT ];then NUM=1
fi
NEW=`head -${NUM} $TMP/list.txt|tail -1`
TYPE=`file -b "${CWD}/$NEW"`
case $TYPE in
*image*|*bitmap*)copy_image "$CWD/$NEW" || y=$(($y + 1)) # no ffmpeg
break;;
symbolic*)
if file -b $(readlink "${CWD}/$NEW") | grep -qE 'image|bitmap' ;then
copy_image "$CWD/$NEW" || y=$(($y + 1)) # no ffmpeg
break
fi;;
*)case "$NEW" in
*.svgz)copy_image "$CWD/$NEW" || y=$(($y + 1)) # compressed svg
break;;
esac
y=$(($y + 1))
echo -n "$NEW" > $TMP/current.txt
if [ $y -ge 300 ];then
splash "$(gettext "No supported file types found in a timely manner. Press OK to exit.")"
exit
else
continue
fi;;
esac
done
}
export -f image_next
edit_image() {
if type gimp >/dev/null 2>&1 ; then
gimp $CWD/`cat $TMP/current.txt` &
else
defaultimageeditor $CWD/`cat $TMP/current.txt` &
fi
}
export -f edit_image
###### set up some stuff
trap trap_exit EXIT
for i in *;do [ ! -d "$i" ] && echo "$i" >> $TMP/list.txt;done
sed -i 's/^ //g' $TMP/list.txt #leading space?
cat $TMP/list.txt | wc -l > $TMP/total.txt
read TOT <$TMP/total.txt
export TOT
if [ -z "$1" -o -d "$1" ];then
IMG0=`head -1 $TMP/list.txt`
else
IMG0="${1##*/}"
fi
echo -n "$IMG0" > $TMP/current.txt
if [ -h "$IMG0" ];then
file -b `readlink "$IMG0"` | grep -qE 'image|bitmap' || image_next 1
copy_image "$IMG0"
elif file -b "$IMG0" | grep -qE 'image|bitmap';then
copy_image "$IMG0"
elif echo "$IMG0" | grep -q '\.svgz$';then
copy_image "$IMG0"
else
image_next 1
fi
###### main dialog
export IMGGUI='<window title="Image Viewer" icon-name="imageview" decorated="'$DECO'" type-hint="'$HINT'">
<vbox>
<menubar>
<menu>
<menuitem stock-id="gtk-preferences">
<action>_prefs</action>
</menuitem>
<menuitem auto-refresh="true" stock-id="gtk-edit">
<action>edit_image &</action>
</menuitem>
<menuitem stock-id="gtk-quit">
<action>exit:Quit</action>
</menuitem>
<label>'$(gettext "File")'</label>
</menu>
<menu>
<menuitem stock-id="gtk-help">
<action>_help &</action>
</menuitem>
<menuitem label="_Legal" use-underline="true" icon="gtk-file">
<action>defaultbrowser /usr/share/doc/legal/gpl-2.0.txt &</action>
</menuitem>
<label>'$(gettext "Help")'</label>
</menu>
</menubar>
<vbox height-request="'$VBOXY'" width-request="'$VBOXX'">
<pixmap>
<height>'$PIXY'</height>
<width>'$PIXX'</width>
<variable>PIXMAP</variable>
<input file>'$TMP'/img</input>
</pixmap>
</vbox>
<hbox homogeneous="true">
<text auto-refresh="true" tooltip-text="filename"><input file>'$TMP'/current.txt</input></text>
</hbox>
<hbox homogeneous="true">
<hbox>
<button tooltip-text="back or Back key on keyboard">
<input file stock="gtk-go-back"></input>
<variable>back</variable>
<action>image_next 0</action>
<action>refresh:PIXMAP</action>
<sensitive>'$MANUAL'</sensitive>
</button>
<button tooltip-text="forward or Forward key on keyboard">
<input file stock="gtk-go-forward"></input>
<variable>forward</variable>
<action>image_next 1</action>
<action>refresh:PIXMAP</action>
<sensitive>'$MANUAL'</sensitive>
</button>
<timer milliseconds="true" interval="'$TMR'" visible="false">
<variable>tmr</variable>
<action>image_next 1</action>
<action>refresh:PIXMAP</action>
<sensitive>'$SLIDE'</sensitive>
</timer>
<button tooltip-text="start slideshow or P key on keyboard">
<input file stock="gtk-media-play"></input>
<action>enable:tmr</action>
<action>disable:back</action>
<action>disable:forward</action>
</button>
<button tooltip-text="stop slideshow or S key on keyboard">
<input file stock="gtk-media-stop"></input>
<action>disable:tmr</action>
<action>enable:back</action>
<action>enable:forward</action>
</button>
<button><label>Cancel</label><input file stock="gtk-cancel"></input></button>
</hbox>
</hbox>
</vbox>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = Left ] && echo true)">image_next 0</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = Left ] && echo true)">refresh:PIXMAP</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = Right ] && echo true)">image_next 1</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = Right ] && echo true)">refresh:PIXMAP</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = q ] && echo true)">exit:QUIT</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = p ] && echo true)">enable:tmr</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = p ] && echo true)">disable:back</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = p ] && echo true)">disable:forward</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = s ] && echo true)">disable:tmr</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = s ] && echo true)">enable:back</action>
<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = s ] && echo true)">enable:forward</action>
</window>'
gtkdialog -p IMGGUI $GEO 2>&1 >/dev/null
###### end |
@01micko
|
Great to see you here, @johanmalm! Puppy needs a Wayland replacement for JWM (https://joewing.net/projects/jwm/) and labwc is definitely the top contender. |
Yes slackware64-current.
Thanks! It needs to handle multiple monitors, that's the next thing. |
Greetings to you both. Yes - I've run both jwm and openbox over years. I like traditional stacking managers, but find mutter/kwin/etc too heavy and too dependent on their respective eco-systems. I'm trying to just focus on the labwc "Acceptance Criteria". I suspect it'll take a long time to reach the stability of openbox, but I've used it as my daily driver for quite some time. |
For wwals I had to build gtkdialog and change the path (/usr/share/backgrounds) - but otherwise it worked out of the box for me (on Arch Linux with a modest wayland setup). |
I'm not familiar with https://github.com/johanmalm/labwc-tweaks/blob/2f7cd9c4f84461bfb3148b73aab00560a2bdce9f/main.c#L25 |
New code for wwals - now supporting multi monitors At first run no need to edit the script, just run Only tested with 1 and 2 screens but should work with any number greater than 2. I originally designed this GUI about 4 or 5 years ago when I picked up an old acer w500 iconia tablet. It worked ok with the touch interface. Only the backend has changed to suit wlroots based compositors. It probably needs a bit more dialog for better UX, just to inform the user what is going on. Maybe one day. At the moment it does exactly what I want. wwals
#!/bin/bash
# wayland wallpapers
# choose a wallpaper
# (c) Michael Amadio 2021 GPL (/usr/share/doc/legal)
# this changes walls for wayland wlroots compositors
# requires 'swaybg', 'wlr-randr', 'gtkdialog'
# setup config #------------------
rm -f /tmp/buttons 2>/dev/null # in case of a crash
BGDIR=${BGDIR:-/usr/share/backgrounds}
export CONFDIR=$XDG_CONFIG_HOME/wwals
[ -d "$CONFDIR" ] || mkdir -p $CONFDIR
CONF=$CONFDIR/wwals.conf
if [ ! -f "$CONF" ];then
echo "BGDIR=$BGDIR" > $CONF
fi
. $CONF
export CMD_FILE=$CONFDIR/cmd
export BGDIR
## setup vars #------------------
a=`wlr-randr | grep -m1 'preferred' | grep -o '[0-9].*px' | sed 's/ px//'`
NUM_MONS=1
MONITOR=
# for gui on main monitor
SCRX=${a%x*}
SCRY=${a#*x}
# get number of monitors and output names
MONITORS="$(while read -r MON REST
do
case "${MON:0:3}" in
[0-9]*|Phy|Ena|Mod|Pos|Tra|Sca)continue;;
esac
echo $MON
done <<<$(printf "$(wlr-randr)"))"
echo $MONITORS
NUM_MONS=$(echo $MONITORS | wc -w)
# bail out if in portrait (tablets)
[ $SCRX -lt $SCRY ] && echo '<window title="Background Choice" width-request="400" resizable="false">
<vbox>
<hbox space-expand="true" space-fill="true">
<pixmap icon_size="6">
<input file stock="gtk-dialog-warning"></input>
</pixmap>
<text space-expand="true" space-fill="true">
<label>Please switch back into Landscape mode to choose a Wallpaper</label>
</text>
</hbox>
<hbox>
<button ok></button>
</hbox>
</vbox>
</window>'|gtkdialog -s -c && exit
export W=$((7 * $SCRX / 10)) #70%
export H=$((6 * $SCRY / 10)) #60%
export PH=$(($H - 70))
## functions #------------------
set_wall() { # single wallpaper
wall="/usr/share/backgrounds/$@"
# build command
printf %s "swaybg -i \"$wall\" >/dev/null 2>&1 &" > $CMD_FILE # so compositor can set bg at start up
}
set_multi() { # diferent wallpapers per monitor
echo "$1"
# build command
echo -n "--output $2 -i \"$BGDIR/$1\" " >> $CMD_FILE
}
multimon() {
export Q='<window title="Multiple Monitors" width-request="400" resizable="false">
<vbox>
<hbox space-expand="true" space-fill="true">
<pixmap icon_size="6">
<input file stock="gtk-dialog-info"></input>
</pixmap>
<text space-expand="true" space-fill="true" use-markup="true">
<label>"You have '$1' monitors connected. Would you like the same background on each of them? If you choose <b>No</b> then you will be given the option to use different backgrounds on each screen."</label>
</text>
</hbox>
<hbox>
<button yes></button><button no></button>
</hbox>
</vbox>
</window>'
eval `gtkdialog -p Q -c`
echo $EXIT
case $EXIT in
Yes)return 0;;
abort)exit 0;;
*)return 1;;
esac
}
button_gui() {
# populate main gui
WALLS=$(ls -1 $BGDIR)
c=1
while read WALL
do
echo '<button image-position="top" tooltip-text="Click to set '"${WALL##*/}"' as wallpaper!">
<label>'"$WALL"'</label>
<variable>'"BG${c}"'</variable>
<input file>'$BGDIR'/'"$WALL"'</input>
<height>'$PH'</height>
<action>'$1 "\"$WALL\"" $2'</action>
<action type="exit">exit</action>
</button>' >> /tmp/buttons
c=$((${c}+1))
done <<<$WALLS
}
main_gui() {
BUTTONS=`cat /tmp/buttons`
export GUI='<window title="Background Choice '$1'">
<hbox height-request="'$H'" width-request="'$W'">
<hbox scrollable="true">
'$BUTTONS'
</hbox>
</hbox>
</window>'
gtkdialog -p GUI -c || printf "$GUI" # printf for debug
rm -f /tmp/buttons
}
export -f set_wall
export -f set_multi
export -f multimon
export -f button_gui
export -f main_gui
# main #------------------
SET_CMD=set_wall
if [ $NUM_MONS -gt 1 ]; then
if multimon $NUM_MONS ; then
SET_CMD=set_multi
echo -n 'swaybg ' > $CMD_FILE
for MONITOR in $(echo $MONITORS); do
button_gui $SET_CMD $MONITOR
main_gui " - Monitor: $MONITOR"
done
if [ -e "$CMD_FILE" ]; then
echo -n ' >/dev/null 2>&1 &' >> $CMD_FILE
fi
else
button_gui $SET_CMD
main_gui
fi
else
button_gui $SET_CMD
main_gui
fi
if [ -e "$CMD_FILE" ]; then
killall swaybg >/dev/null 2>&1
. $CMD_FILE
else
exit 1
fi
exit 0 Screenshots |
It's a great script. Is it worth putting it in a git repo online so that people can clone it? I had to make the following tweaks to make it work.
and
|
Yes I think I will put it in a gist with your tweaks. I do intend to support |
Ah - I've discovered the same issue. It's a short-coming in the layer-shell implementation. I was trying to fix it last night but got stuck. Will be sorted 😄 |
@johanmalm - gist is created EDIT: I did it the other way around - I removed non-essential externals but haven't yet implemented |
I have fixed a few layer-shell short-comings now. Config file below show how to specify a monitor (eDP-1 in this example)
|
@johanmalm Not at all! # Typical laptop setup, with wifi, brightness, battery etc, for
# i3/Sway.
# For X11/i3, you'll want to replace calls to swaymsg with i3-msg, and
# the sway-xkb module with the xkb module.
# fonts we'll be re-using here and there
awesome: &awesome Font Awesome 5 Free:style=solid:pixelsize=14
awesome_brands: &awesome_brands Font Awesome 5 Brands:pixelsize=16
std_underline: &std_underline {underline: { size: 2, color: ff0000ff}}
# This is THE bar configuration
bar:
height: 28
location: top
spacing: 5
margin: 7
# Default font
font: DejaVuSans:pixelsize=14
foreground: dddddddd
background: 11111133
border:
width: 1
color: 555555cc
margin: 5
top-margin: 0
left:
- label:
content:
- string: { on-click: pupmenu, text: A, left-margin: 12, right-margin: 18, font: pdingobats2:pixelsize=18, foreground: ebb120dd, deco: {background: {color: 11111133}} }
- label:
content:
string:
on-click: defaultterminal
text:
left-margin: 5
right-margin: 5
font: *awesome
foreground: dddddddd
deco: {background: {color: 00000033}}
- label:
content:
string:
on-click: firefox
text: firefox
left-margin: 5
right-margin: 5
font: *awesome_brands
foreground: dd00dddd
deco: {background: {color: 00000033}}
- label:
content:
string:
on-click: thunar
text: folder
left-margin: 5
right-margin: 5
font: *awesome
foreground: ffe198dd
deco: {background: {color: 00000033}}
- foreign-toplevel:
content:
map:
tag: activated
values:
false: {empty: {}}
true:
- string: {text: "{app-id}: {title}"}
right:
- removables:
anchors:
drive: &drive { text: , font: *awesome, foreground: 3d3d3ddd}
optical: &optical {text: , font: *awesome, foreground: bdbdbddd}
spacing: 5
content:
map:
tag: mounted
values:
false:
map:
tag: optical
on-click: udisksctl mount -b {device}
values:
false: [{string: *drive}, {string: {text: "{label}"}}]
true: [{string: *optical}, {string: {text: "{label}"}}]
true:
map:
tag: optical
on-click: udisksctl unmount -b {device}
values:
false:
- string: {<<: *drive, deco: *std_underline}
- string: {text: "{label}"}
true:
- string: {<<: *optical, deco: *std_underline}
- string: {text: "{label}"}
- alsa:
card: hw:Generic
mixer: Master
content:
map:
tag: online
values:
false: {string: {text: , font: *awesome, foreground: ff0000ff}}
true:
map:
on-click: /bin/sh -c "amixer -q sset Speaker unmute && amixer -q sset Headphone unmute && amixer -q sset Master toggle"
tag: muted
values:
true: {string: {text: , font: *awesome, foreground: ffffff66}}
false:
ramp:
tag: volume
items:
- string: {text: , font: *awesome}
- string: {text: , font: *awesome}
- string: {text: , font: *awesome}
- string: {text: , font: *awesome}
- string: {text: , font: *awesome}
- clock:
time-format: "%H:%M %Z"
content:
- string: {text: , font: *awesome, on-click: yad --calendar, foreground: bbcfffdd}
- string: {text: "{time}"}
- label:
content:
string:
on-click: logout_gui
text:
font: *awesome
foreground: dd0033dd Note that there are obvious puppyisms in the Also, here is pdingobats, which includes a weather font, thermometer and other perhaps useful icons |
That at least made the bar start correctly - before it wasn't accepting mouse input.
The Thanks! |
How hard would it be to adapt the JWM menu generator to generate a labwc menu? 🤔 If labwc can replace JWM's window management and yambar can replace the panels, the only missing piece for a pure Wayland desktop is the menu. |
Haha! 👅 |
There is always jgmenu - although not designed for wayland. Not sure how much work is involved in supporting XGrabKeybaord() et al. And there is https://github.com/nwg-piotr/nwg-launchers Where is the source code for pupmenu? Is it GTK3? Is it a long-running application or do you start a new instance every time you run it? |
submenus are working now 😸 recording.mp4 |
@01micko Looks great! |
All the basics are pretty much in place now. Just need to develop a few user friendly apps and work on some mouse bindings for Then I have to develop the startup/shutdown routines as well as weed out apps that simply don't work under pure wayland/wlroots. Also, adding gtk-layer-shell to Then, an alpha for release might be ready 🤣 |
I was thinking, maybe I should implement the layer shell protocol in Cage. Then, I can write a simple GTK+ 3 panel that resembles JWM's tray (using https://github.com/wmww/gtk-layer-shell) and menu (using code borrowed from the menu generator), then replace JWM's tray and right-click menu with it. With a setup like this, Cage will have two windows: a fullscreen Xwayland window, and a thin panel window which is always above it (a window in the overlay layer, anchored to the top, etc'). We'll be able to use this panel+menu thingy with labwc, to mimic Puppy's traditional desktop more closely. |
In openbox, there is http://openbox.org/wiki/Help:Actions#ShowMenu which let’s the user specify the position of the menu. |
Just leaving this here. lizzy.mp4 |
@01micko After #2610 and #2611, it should be possible to add a labwc petbuild alongside the Cage one, and start working on labwc vs. X separation (i.e. stuff like starting labwc via ~/.profile, calling .xinitrc when the compositor starts, skipping xorgwizard, fixing the graphics wizard, and so on). There's a branch that fixes #2611, which updates wlroots to master (as of yesterday), as a placeholder for the 0.15.0 release. We can merge it now and update wlroots as needed (until the 0.15.0 release), so we can start working on integrating labwc even before the release. |
I think |
|
Happy to upversion against a particular wlroots commit, but unless there is a particular request for it, I'll wait until wlroots 0.15.0 is released. |
@dimkr @johanmalm a video of a Limitations
gtkdialog-menu.mp4 |
Discussion moved to #2617 |
Since we have been having fun with wayland I thought I'd try labwc
Took 10 minutes to build after I figured out the root patch - same as cage.
Runs straight from urxvt when the desktop is under cage because all the environment is set up. To run from console I'd have to hack start xwayland I suppose.
Anyway - a video!
I now need a terminal emulator - havoc looks good.
The text was updated successfully, but these errors were encountered: