Compare commits

...

10 Commits

19 changed files with 961 additions and 42 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16)
project(lubuntu-installer-prompt VERSION 1.1.2 LANGUAGES CXX)
project(lubuntu-installer-prompt VERSION 2.0.0 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
@ -12,9 +12,8 @@ set(CMAKE_INSTALL_PREFIX "/usr")
find_package(ECM REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core Widgets Network LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets Network LinguistTools)
find_package(KF5 REQUIRED COMPONENTS NetworkManagerQt WidgetsAddons)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network LinguistTools)
find_package(KF6 REQUIRED COMPONENTS NetworkManagerQt)
file(GLOB TS_FILES "src/translations/lubuntu-installer-prompt_*.ts")
@ -43,8 +42,8 @@ set(PROJECT_SOURCES
set(TRANSLATION_RESOURCES "src/translations.qrc")
configure_file(${TRANSLATION_RESOURCES} translations.qrc COPYONLY)
qt5_add_translation(QM_FILES ${TS_FILES})
qt5_add_resources(QM_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
qt_add_translation(QM_FILES ${TS_FILES})
qt_add_resources(QM_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
add_custom_target(translations ALL DEPENDS ${QM_FILES})
@ -55,7 +54,7 @@ add_executable(lubuntu-installer-prompt
add_dependencies(lubuntu-installer-prompt translations)
target_link_libraries(lubuntu-installer-prompt PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt5::Network KF5::NetworkManagerQt KF5::WidgetsAddons)
target_link_libraries(lubuntu-installer-prompt PRIVATE Qt6::Widgets Qt6::Network KF6::NetworkManagerQt)
install(TARGETS lubuntu-installer-prompt
BUNDLE DESTINATION .
@ -65,6 +64,8 @@ install(TARGETS lubuntu-installer-prompt
install(PROGRAMS "scripts/change-system-language" DESTINATION libexec)
install(PROGRAMS "scripts/start-lubuntu-live-env" DESTINATION libexec)
install(FILES "lubuntu-live-environment.desktop" DESTINATION share/xsessions)
install(FILES "rc.xml" DESTINATION /etc/xdg/xdg-lubuntu-live-environment/openbox)
install(FILES "panel.conf" DESTINATION /etc/xdg/xdg-lubuntu-live-environment/lxqt)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(lubuntu-installer-prompt)

62
debian/changelog vendored
View File

@ -1,3 +1,65 @@
lubuntu-installer-prompt (25.04.4) plucky; urgency=medium
* Update panel for the current default configuration.
-- Walter Lapchynski <wxl@ubuntu.com> Sun, 23 Mar 2025 01:18:05 +0000
lubuntu-installer-prompt (25.04.3) plucky; urgency=medium
* Removing desktop switch accidentially added to panel.
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 07 Mar 2025 18:29:48 +0000
lubuntu-installer-prompt (25.04.2) plucky; urgency=medium
* Update panel for the current default configuration.
-- Walter Lapchynski <wxl@ubuntu.com> Thu, 06 Mar 2025 01:01:59 +0000
lubuntu-installer-prompt (25.04.1) plucky; urgency=medium
* Update background image.
* Install main executable to /usr/bin rather than /bin.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 04 Mar 2025 23:57:40 -0600
lubuntu-installer-prompt (24.10.1) oracular; urgency=medium
* Update to use Qt 6.
* Fix the weird horizontal line at the bottom of the screen. (LP: #2081229)
* Update background image. (LP: #2081230)
* Use Kvantum theme by default to match the OS default. (LP: #2081233)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 01 Oct 2024 09:30:57 -0500
lubuntu-installer-prompt (24.04.6) noble; urgency=medium
* Launch Calamares in OEM mode when "oem-config/enable=true" is passed as a
boot parameter (LP: #2063291).
-- Simon Quigley <tsimonq2@ubuntu.com> Wed, 24 Apr 2024 00:20:14 -0500
lubuntu-installer-prompt (24.04.5) noble; urgency=medium
* Reduce desktops to 1 to prevent accidental switching. (LP: #1469362)
* Remove desktop switcher from panel for a cleaner look.
-- Walter Lapchynski <wxl@ubuntu.com> Wed, 10 Apr 2024 23:08:27 +0000
lubuntu-installer-prompt (24.04.4) noble; urgency=medium
* Fix a race condition where a wired network connection could hang the
installer prompt during startup.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 24 Mar 2024 20:40:48 -0500
lubuntu-installer-prompt (24.04.3) noble; urgency=medium
* Don't let people close modal windows so they don't accidentally confuse
the prompt and mess up their system.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 11 Mar 2024 18:14:21 -0500
lubuntu-installer-prompt (24.04.2) noble; urgency=medium
* Remove a spurious d/source/options file resulting in the whole Git repo

7
debian/control vendored
View File

@ -7,10 +7,9 @@ Priority: optional
Build-Depends: cmake,
debhelper-compat (= 13),
extra-cmake-modules,
libkf5networkmanagerqt-dev,
libkf5widgetsaddons-dev,
qtbase5-dev,
qttools5-dev
libkf6networkmanagerqt-dev,
qt6-base-dev,
qt6-tools-dev
Standards-Version: 4.6.2
Vcs-Browser: https://git.lubuntu.me/Lubuntu/installer-prompt-packaging
Vcs-Git: https://git.lubuntu.me/Lubuntu/installer-prompt-packaging.git

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 718 KiB

50
panel.conf Normal file
View File

@ -0,0 +1,50 @@
panels=panel1
[panel1]
plugins=fancymenu, quicklaunch, showdesktop, taskbar, mount, volume, tray, statusnotifier, worldclock
position=Bottom
desktop=0
[fancymenu]
buttonsAtTop=false
categoriesAtRight=false
favorites\1\desktopFile=/usr/share/applications/featherpad.desktop
favorites\2\desktopFile=/usr/share/applications/lubuntu-update.desktop
favorites\3\desktopFile=/usr/share/applications/pcmanfm-qt.desktop
favorites\4\desktopFile=/usr/share/applications/qterminal.desktop
favorites\size=4
filterClear=true
menu_file=/etc/xdg/menus/lxqt-applications-compact.menu
showText=false
type=fancymenu
[quicklaunch]
type=quicklaunch
apps\1\desktop=/usr/share/applications/pcmanfm-qt.desktop
apps\size=1
alignment=Left
[taskbar]
type=taskbar
buttonWidth=200
[tray]
type=tray
[mount]
type=mount
[worldclock]
type=worldclock
[volume]
device=0
type=volume
[showdesktop]
alignment=Right
type=showdesktop
[statusnotifier]
alignment=Right
type=statusnotifier

750
rc.xml Normal file
View File

@ -0,0 +1,750 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file, it will be overwritten on install.
Copy the file to $HOME/.config/openbox/ instead. -->
<openbox_config xmlns="http://openbox.org/3.4/rc"
xmlns:xi="http://www.w3.org/2001/XInclude">
<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>
<focus>
<focusNew>yes</focusNew>
<!-- always try to focus new windows when they appear. other rules do
apply -->
<followMouse>no</followMouse>
<!-- move focus to a window when you move the mouse into it -->
<focusLast>yes</focusLast>
<!-- focus the last used window when changing desktops, instead of the one
under the mouse pointer. when followMouse is enabled -->
<underMouse>no</underMouse>
<!-- move focus under the mouse, even when the mouse is not moving -->
<focusDelay>200</focusDelay>
<!-- when followMouse is enabled, the mouse must be inside the window for
this many milliseconds (1000 = 1 sec) before moving focus to it -->
<raiseOnFocus>no</raiseOnFocus>
<!-- when followMouse is enabled, and a window is given focus by moving the
mouse into it, also raise the window -->
</focus>
<placement>
<!-- Lubuntu specific : Place new windows where the mouse is
<monitor>Mouse</monitor>
<primaryMonitor>Mouse</primaryMonitor>
-->
<policy>Smart</policy>
<!-- 'Smart' or 'UnderMouse' -->
<center>yes</center>
<!-- whether to place windows in the center of the free area found or
the top left corner -->
<monitor>Mouse</monitor>
<!-- with Smart placement on a multi-monitor system, try to place new windows
on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
the active window is, 'Primary' - only on the primary monitor -->
<primaryMonitor>Mouse</primaryMonitor>
<!-- The monitor where Openbox should place popup dialogs such as the
focus cycling popup, or the desktop switch popup. It can be an index
from 1, specifying a particular monitor. Or it can be one of the
following: 'Mouse' - where the mouse is, or
'Active' - where the active window is -->
</placement>
<theme>
<!-- Lubuntu specific : Theme = Lubuntu and font = Ubuntu
-->
<name>Lubuntu Arc</name>
<titleLayout>NLIMC</titleLayout>
<!--
available characters are NDSLIMC, each can occur at most once.
N: window icon
L: window label (AKA title).
I: iconify
M: maximize
C: close
S: shade (roll up/down)
D: omnipresent (on all desktops).
-->
<keepBorder>yes</keepBorder>
<animateIconify>yes</animateIconify>
<font place="ActiveWindow">
<name>Ubuntu Medium</name>
<size>11</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveWindow">
<name>Ubuntu Medium</name>
<size>11</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuHeader">
<name>Ubuntu</name>
<size>11</size>
<!-- font size in points -->
<weight>normal</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="MenuItem">
<name>Ubuntu</name>
<size>11</size>
<!-- font size in points -->
<weight>normal</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="ActiveOnScreenDisplay">
<name>Ubuntu Medium</name>
<size>11</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
<font place="InactiveOnScreenDisplay">
<name>Ubuntu Medium</name>
<size>11</size>
<!-- font size in points -->
<weight>bold</weight>
<!-- 'bold' or 'normal' -->
<slant>normal</slant>
<!-- 'italic' or 'normal' -->
</font>
</theme>
<desktops>
<!-- this stuff is only used at startup, pagers allow you to change them
during a session
these are default values to use when other ones are not already set
by other applications, or saved in your session
use obconf if you want to change these without having to log out
and back in -->
<!-- NOTE: desktops set to 1 to keep folks from accidentially switching
away from the installer -->
<number>1</number>
<firstdesk>1</firstdesk>
<names>
<!-- set names up here if you want to, like this:
<name>desktop 1</name>
<name>desktop 2</name>
-->
</names>
<popupTime>875</popupTime>
<!-- The number of milliseconds to show the popup for when switching
desktops. Set this to 0 to disable the popup. -->
</desktops>
<resize>
<!-- Lubuntu specific : Don't draw content on resize (too heavy).
<drawContents>no</drawContents>
-->
<drawContents>no</drawContents>
<popupShow>Nonpixel</popupShow>
<!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
<popupPosition>Center</popupPosition>
<!-- 'Center', 'Top', or 'Fixed' -->
<popupFixedPosition>
<!-- these are used if popupPosition is set to 'Fixed' -->
<x>10</x>
<!-- positive number for distance from left edge, negative number for
distance from right edge, or 'Center' -->
<y>10</y>
<!-- positive number for distance from top edge, negative number for
distance from bottom edge, or 'Center' -->
</popupFixedPosition>
</resize>
<!-- You can reserve a portion of your screen where windows will not cover when
they are maximized, or when they are initially placed.
Many programs reserve space automatically, but you can use this in other
cases. -->
<margins>
<top>0</top>
<bottom>0</bottom>
<left>0</left>
<right>0</right>
</margins>
<dock>
<position>TopLeft</position>
<!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
<floatingX>0</floatingX>
<floatingY>0</floatingY>
<noStrut>no</noStrut>
<stacking>Above</stacking>
<!-- 'Above', 'Normal', or 'Below' -->
<direction>Vertical</direction>
<!-- 'Vertical' or 'Horizontal' -->
<autoHide>no</autoHide>
<hideDelay>300</hideDelay>
<!-- in milliseconds (1000 = 1 second) -->
<showDelay>300</showDelay>
<!-- in milliseconds (1000 = 1 second) -->
<moveButton>Middle</moveButton>
<!-- 'Left', 'Middle', 'Right' -->
</dock>
<keyboard>
<chainQuitKey>C-g</chainQuitKey>
<!-- Keybindings for desktop switching -->
<keybind key="C-A-Left">
<action name="GoToDesktop"><to>left</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Right">
<action name="GoToDesktop"><to>right</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Up">
<action name="GoToDesktop"><to>up</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-A-Down">
<action name="GoToDesktop"><to>down</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-S-A-Left">
<action name="SendToDesktop"><to>left</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-S-A-Right">
<action name="SendToDesktop"><to>right</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-S-A-Up">
<action name="SendToDesktop"><to>up</to><wrap>no</wrap></action>
</keybind>
<keybind key="C-S-A-Down">
<action name="SendToDesktop"><to>down</to><wrap>no</wrap></action>
</keybind>
<!-- Keybindings for windows -->
<keybind key="A-F4">
<action name="Close"/>
</keybind>
<keybind key="A-Escape">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</keybind>
<keybind key="A-space">
<action name="ShowMenu"><menu>client-menu</menu></action>
</keybind>
<!-- Keybindings for window switching -->
<keybind key="A-Tab">
<action name="NextWindow">
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
<allDesktops>yes</allDesktops>
</action>
</keybind>
<keybind key="A-S-Tab">
<action name="PreviousWindow">
<finalactions>
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</finalactions>
<allDesktops>yes</allDesktops>
</action>
</keybind>
<!-- Keybindings for window switching with the arrow keys -->
<keybind key="A-S-Right">
<action name="DirectionalCycleWindows">
<direction>right</direction>
</action>
</keybind>
<keybind key="A-S-Left">
<action name="DirectionalCycleWindows">
<direction>left</direction>
</action>
</keybind>
<keybind key="A-S-Up">
<action name="DirectionalCycleWindows">
<direction>up</direction>
</action>
</keybind>
<keybind key="A-S-Down">
<action name="DirectionalCycleWindows">
<direction>down</direction>
</action>
</keybind>
<!-- Keybindings to toggle fullscreen -->
<keybind key="F11">
<action name="ToggleFullscreen"/>
</keybind>
</keyboard>
<mouse>
<!--
Lubuntu specific : Specific mouse settings
<dragThreshold>8</dragThreshold>
<doubleClickTime>200</doubleClickTime>
-->
<dragThreshold>8</dragThreshold>
<!-- number of pixels the mouse must move before a drag begins -->
<doubleClickTime>200</doubleClickTime>
<!-- in milliseconds (1000 = 1 second) -->
<screenEdgeWarpTime>400</screenEdgeWarpTime>
<!-- Time before changing desktops when the pointer touches the edge of the
screen while moving a window, in milliseconds (1000 = 1 second).
Set this to 0 to disable warping -->
<screenEdgeWarpMouse>false</screenEdgeWarpMouse>
<!-- Set this to TRUE to move the mouse pointer across the desktop when
switching due to hitting the edge of the screen -->
<context name="Frame">
<mousebind button="A-Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="A-Left" action="Click">
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="A-Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="A-Right" action="Drag">
<action name="Resize"/>
</mousebind>
<mousebind button="A-Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
<mousebind button="A-S-Up" action="Click">
<action name="SendToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="A-S-Down" action="Click">
<action name="SendToDesktop"><to>next</to></action>
</mousebind>
</context>
<context name="Titlebar">
<mousebind button="Left" action="Drag">
<action name="Move"/>
</mousebind>
<mousebind button="Left" action="DoubleClick">
<action name="ToggleMaximize"/>
</mousebind>
<mousebind button="Up" action="Click">
<action name="if">
<shaded>no</shaded>
<then>
<action name="Shade"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
<action name="Lower"/>
</then>
</action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="if">
<shaded>yes</shaded>
<then>
<action name="Unshade"/>
<action name="Raise"/>
</then>
</action>
</mousebind>
</context>
<context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Lower"/>
<action name="FocusToBottom"/>
<action name="Unfocus"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>
<context name="Top">
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>top</edge></action>
</mousebind>
</context>
<context name="Left">
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>left</edge></action>
</mousebind>
</context>
<context name="Right">
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>right</edge></action>
</mousebind>
</context>
<context name="Bottom">
<mousebind button="Left" action="Drag">
<action name="Resize"><edge>bottom</edge></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>
<context name="TRCorner BRCorner TLCorner BLCorner">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Drag">
<action name="Resize"/>
</mousebind>
</context>
<context name="Client">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Icon">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="ShowMenu"><menu>client-menu</menu></action>
</mousebind>
</context>
<context name="AllDesktops">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleOmnipresent"/>
</mousebind>
</context>
<context name="Shade">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleShade"/>
</mousebind>
</context>
<context name="Iconify">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Iconify"/>
</mousebind>
</context>
<context name="Maximize">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Middle" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="ToggleMaximize"/>
</mousebind>
<mousebind button="Middle" action="Click">
<action name="ToggleMaximize"><direction>vertical</direction></action>
</mousebind>
<mousebind button="Right" action="Click">
<action name="ToggleMaximize"><direction>horizontal</direction></action>
</mousebind>
</context>
<context name="Close">
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
<action name="Unshade"/>
</mousebind>
<mousebind button="Left" action="Click">
<action name="Close"/>
</mousebind>
</context>
<context name="Desktop">
<mousebind button="Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
<mousebind button="C-A-Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="C-A-Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
<mousebind button="Left" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
<mousebind button="Right" action="Press">
<action name="Focus"/>
<action name="Raise"/>
</mousebind>
</context>
<context name="Root">
<!-- Menus -->
<mousebind button="Middle" action="Press">
<action name="ShowMenu"><menu>client-list-combined-menu</menu></action>
</mousebind>
<mousebind button="Right" action="Press">
<action name="ShowMenu"><menu>root-menu</menu></action>
</mousebind>
</context>
<context name="MoveResize">
<mousebind button="Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
<mousebind button="A-Up" action="Click">
<action name="GoToDesktop"><to>previous</to></action>
</mousebind>
<mousebind button="A-Down" action="Click">
<action name="GoToDesktop"><to>next</to></action>
</mousebind>
</context>
</mouse>
<menu>
<!-- You can specify more than one menu file in here and they are all loaded,
just don't make menu ids clash or, well, it'll be kind of pointless -->
<!-- Lubuntu specific : Default menu of Lubuntu -->
<file>/usr/share/lubuntu/openbox/menu.xml</file>
<!-- default menu file (or custom one in $HOME/.config/openbox/) -->
<file>menu.xml</file>
<hideDelay>200</hideDelay>
<!-- if a press-release lasts longer than this setting (in milliseconds), the
menu is hidden again -->
<middle>no</middle>
<!-- center submenus vertically about the parent entry -->
<submenuShowDelay>100</submenuShowDelay>
<!-- time to delay before showing a submenu after hovering over the parent
entry.
if this is a negative value, then the delay is infinite and the
submenu will not be shown until it is clicked on -->
<submenuHideDelay>400</submenuHideDelay>
<!-- time to delay before hiding a submenu when selecting another
entry in parent menu
if this is a negative value, then the delay is infinite and the
submenu will not be hidden until a different submenu is opened -->
<applicationIcons>yes</applicationIcons>
<!-- Lubuntu specific : Show applications icons if openbox is build with this support -->
<manageDesktops>yes</manageDesktops>
<!-- show the manage desktops section in the client-list-(combined-)menu -->
<showIcons>yes</showIcons>
<!-- controls if icons appear in the client-list-(combined-)menu -->
</menu>
<applications>
<!--
# this is an example with comments through out. use these to make your
# own rules, but without the comments of course.
# you may use one or more of the name/class/role/title/type rules to specify
# windows to match
<application name="the window's _OB_APP_NAME property (see obxprop)"
class="the window's _OB_APP_CLASS property (see obxprop)"
groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
role="the window's _OB_APP_ROLE property (see obxprop)"
title="the window's _OB_APP_TITLE property (see obxprop)"
type="the window's _OB_APP_TYPE property (see obxprob)..
(if unspecified, then it is 'dialog' for child windows)">
# you may set only one of name/class/role/title/type, or you may use more
# than one together to restrict your matches.
# the name, class, role, and title use simple wildcard matching such as those
# used by a shell. you can use * to match any characters and ? to match
# any single character.
# the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
# or desktop
# when multiple rules match a window, they will all be applied, in the
# order that they appear in this list
# each rule element can be left out or set to 'default' to specify to not
# change that attribute of the window
<decor>yes</decor>
# enable or disable window decorations
<shade>no</shade>
# make the window shaded when it appears, or not
<position force="no">
# the position is only used if both an x and y coordinate are provided
# (and not set to 'default')
# when force is "yes", then the window will be placed here even if it
# says you want it placed elsewhere. this is to override buggy
# applications who refuse to behave
<x>center</x>
# a number like 50, or 'center' to center on screen. use a negative number
# to start from the right (or bottom for <y>), ie -50 is 50 pixels from
# the right edge (or bottom). use 'default' to specify using value
# provided by the application, or chosen by openbox, instead.
<y>200</y>
<monitor>1</monitor>
# specifies the monitor in a xinerama setup.
# 1 is the first head, or 'mouse' for wherever the mouse is
</position>
<size>
# the size to make the window.
<width>20</width>
# a number like 20, or 'default' to use the size given by the application.
# you can use fractions such as 1/2 or percentages such as 75% in which
# case the value is relative to the size of the monitor that the window
# appears on.
<height>30%</height>
</size>
<focus>yes</focus>
# if the window should try be given focus when it appears. if this is set
# to yes it doesn't guarantee the window will be given focus. some
# restrictions may apply, but Openbox will try to
<desktop>1</desktop>
# 1 is the first desktop, 'all' for all desktops
<layer>normal</layer>
# 'above', 'normal', or 'below'
<iconic>no</iconic>
# make the window iconified when it appears, or not
<skip_pager>no</skip_pager>
# asks to not be shown in pagers
<skip_taskbar>no</skip_taskbar>
# asks to not be shown in taskbars. window cycling actions will also
# skip past such windows
<fullscreen>yes</fullscreen>
# make the window in fullscreen mode when it appears
<maximized>true</maximized>
# 'Horizontal', 'Vertical' or boolean (yes/no)
</application>
# end of the example
-->
<!-- Option to maximize all normal window when launched-->
<!--
<application type="normal">
<maximized>true</maximized>
</application>
-->
<!--
Lubuntu specific :
Focus all applications launched
Usefull when launching applications, like terminal from pcmanfm
-->
<application class="*">
<focus>yes</focus>
</application>
</applications>
</openbox_config>

View File

@ -2,17 +2,21 @@
# Starts the Lubuntu Live Environment.
# This is pretty overkill, but don't remove anything without testing
export XDG_CONFIG_DIRS="/etc/xdg/xdg-Lubuntu:"$XDG_CONFIG_DIRS
export XDG_CONFIG_DIRS="/etc/xdg/xdg-lubuntu-live-environment:/etc/xdg/xdg-Lubuntu:"$XDG_CONFIG_DIRS
export XDG_DATA_DIRS="/usr/share/Lubuntu:"$XDG_DATA_DIRS
export XDG_SESSION_CLASS="user"
export XDG_SESSION_DESKTOP="Lubuntu"
export DESKTOP_SESSION="Lubuntu"
export QT_STYLE_OVERRIDE="Breeze"
export QT_STYLE_OVERRIDE="kvantum"
export QT_QPA_PLATFORMTHEME="lxqt"
openbox &
picom &
lubuntu-installer-prompt # This is intentionally *not* backgrounded.
if [[ $(cat /proc/cmdline) =~ "oem-config/enable=true" ]]; then
sudo -E /usr/bin/calamares-launch-oem;
else
lubuntu-installer-prompt;
fi
# If it exits...
killall picom
killall openbox

View File

@ -3,6 +3,7 @@
#include <QMessageBox>
#include <QGuiApplication>
#include <QScreen>
#include <QPainter>
BackgroundScreen::BackgroundScreen(QWidget *parent)
: QWidget(parent) {
@ -16,25 +17,27 @@ BackgroundScreen::~BackgroundScreen()
void BackgroundScreen::activateBackground()
{
// Set the background image and scale it
QImage image(":/background");
if (image.isNull()) {
QImage rawImage(":/background");
if (rawImage.isNull()) {
return;
}
qreal imgRatio = static_cast<qreal>(image.width()) / image.height();
qreal imgRatio = static_cast<qreal>(rawImage.width()) / rawImage.height();
qreal screenRatio = static_cast<qreal>(this->width()) / this->height();
QImage scaled;
if (imgRatio < screenRatio) {
scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation);
scaled = rawImage.scaledToWidth(this->width(), Qt::SmoothTransformation);
int yGap = (scaled.height() - this->height()) / 2;
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
} else {
scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation);
scaled = rawImage.scaledToHeight(this->height(), Qt::SmoothTransformation);
int xGap = (scaled.width() - this->width()) / 2;
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
}
QPixmap bg = QPixmap::fromImage(scaled);
QPalette palette;
palette.setBrush(QPalette::Window, bg);
this->setPalette(palette);
background = scaled;
}
void BackgroundScreen::paintEvent(QPaintEvent *event) {
QPainter painter(this);
painter.drawImage(0, 0, background);
}

View File

@ -10,6 +10,10 @@ public:
explicit BackgroundScreen(QWidget *parent = nullptr);
virtual ~BackgroundScreen();
void activateBackground();
private:
void paintEvent(QPaintEvent *event) override;
QImage background;
};
#endif // BACKGROUNDSCREEN_H

View File

@ -1,6 +1,8 @@
#include "connectionprogressdialog.h"
#include "ui_connectionprogressdialog.h"
#include <QCloseEvent>
ConnectionProgressDialog::ConnectionProgressDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ConnectionProgressDialog)
@ -17,3 +19,8 @@ void ConnectionProgressDialog::setNetworkName(QString name)
{
ui->label->setText(tr("Connecting to %1...").arg(name));
}
void ConnectionProgressDialog::closeEvent(QCloseEvent *event)
{
event->ignore();
}

View File

@ -16,6 +16,9 @@ public:
~ConnectionProgressDialog();
void setNetworkName(QString name);
protected slots:
void closeEvent(QCloseEvent *event) override;
private:
Ui::ConnectionProgressDialog *ui;
};

View File

@ -29,6 +29,7 @@
#include <QTimer>
#include <QFile>
#include <QUuid>
#include <QPainter>
#include <QDBusPendingReply>
#include "installerprompt.h"
#include "wifipassworddialog.h"
@ -44,8 +45,6 @@ InstallerPrompt::InstallerPrompt(QWidget *parent)
cpd = new ConnectionProgressDialog();
updateConnectionInfo();
initLanguageComboBox();
connect(ui->tryLubuntu, &QPushButton::clicked, this, &InstallerPrompt::onTryClicked);
@ -65,6 +64,8 @@ InstallerPrompt::InstallerPrompt(QWidget *parent)
QTimer *repeater = new QTimer();
connect(repeater, SIGNAL(timeout()), this, SLOT(updateConnectionInfo()));
repeater->start(15000);
updateConnectionInfo();
}
InstallerPrompt::~InstallerPrompt()
@ -75,28 +76,25 @@ InstallerPrompt::~InstallerPrompt()
void InstallerPrompt::activateBackground()
{
// Set the background image and scale it
QImage image(":/background");
if (image.isNull()) {
QImage rawImage(":/background");
if (rawImage.isNull()) {
WarningDialog::showWarning(tr("Background image cannot be loaded."));
return;
}
qreal imgRatio = static_cast<qreal>(image.width()) / image.height();
qreal imgRatio = static_cast<qreal>(rawImage.width()) / rawImage.height();
qreal screenRatio = static_cast<qreal>(this->width()) / this->height();
QImage scaled;
if (imgRatio < screenRatio) {
scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation);
scaled = rawImage.scaledToWidth(this->width(), Qt::SmoothTransformation);
int yGap = (scaled.height() - this->height()) / 2;
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
} else {
scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation);
scaled = rawImage.scaledToHeight(this->height(), Qt::SmoothTransformation);
int xGap = (scaled.width() - this->width()) / 2;
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
}
QPixmap bg = QPixmap::fromImage(scaled);
QPalette palette;
palette.setBrush(QPalette::Window, bg);
this->setPalette(palette);
background = scaled;
}
void InstallerPrompt::onTryClicked()
@ -175,7 +173,7 @@ void InstallerPrompt::onNetworkSelected(int index)
QString networkId = ui->networkComboBox->itemData(index).toString();
if (!networkId.isNull()) {
if (networkId.left(4) == "UNI_") { // this is an Ethernet device
QString deviceUni = networkId.right(networkId.count() - 4);
QString deviceUni = networkId.right(networkId.length() - 4);
NetworkManager::WiredDevice wiredDevice(deviceUni);
QDBusPendingReply reply = wiredDevice.disconnectInterface();
reply.waitForFinished();
@ -317,10 +315,14 @@ void InstallerPrompt::updateConnectionInfo()
ui->networkComboBox->setCurrentIndex(connectedDevice);
}
if (NetworkManager::status() == NetworkManager::Connecting) {
cpd->exec();
if (!firstUpdateConnectionInfoCall) {
if (NetworkManager::status() == NetworkManager::Connecting) {
cpd->exec();
} else {
cpd->done(0);
}
} else {
cpd->done(0);
firstUpdateConnectionInfoCall = false;
}
}
@ -426,9 +428,9 @@ QString InstallerPrompt::getDisplayNameForLocale(const QLocale &locale) {
QLocale currentAppLocale = QLocale::system();
QString nativeName = locale.nativeLanguageName();
QString nativeCountryName = sanitize(locale.nativeCountryName());
QString nativeCountryName = sanitize(locale.nativeTerritoryName());
QString englishLanguageName = currentAppLocale.languageToString(locale.language());
QString englishCountryName = sanitize(currentAppLocale.countryToString(locale.country()));
QString englishCountryName = sanitize(currentAppLocale.territoryToString(locale.territory()));
if (nativeName.isEmpty() || nativeCountryName.isEmpty()) {
return QString();
@ -448,3 +450,8 @@ QString InstallerPrompt::getDisplayNameForLocale(const QLocale &locale) {
return displayName;
}
void InstallerPrompt::paintEvent(QPaintEvent *event) {
QPainter painter(this);
painter.drawImage(0, 0, background);
}

View File

@ -10,6 +10,7 @@
#include <QMutex>
#include <QLineEdit>
#include <QProcess>
#include <QImage>
#include <NetworkManagerQt/Device>
#include <NetworkManagerQt/WirelessDevice>
#include <NetworkManagerQt/WiredDevice>
@ -44,10 +45,13 @@ private:
QString wifiSsid;
bool wifiWrongHandling = false;
QMap<QString, QString> languageLocaleMap;
bool firstUpdateConnectionInfoCall = true;
void paintEvent(QPaintEvent *event) override;
void initLanguageComboBox();
QStringList getAvailableLanguages();
QString getDisplayNameForLocale(const QLocale &locale);
QImage background;
};
#endif // INSTALLERPROMPT_H

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>1450</width>
<height>710</height>
<height>604</height>
</rect>
</property>
<property name="minimumSize">
@ -19,6 +19,9 @@
<property name="windowTitle">
<string>Try or Install Lubuntu</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">QWidget {
color: #000000;
@ -515,7 +518,6 @@ QToolTip {
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources>
<include location="resource.qrc"/>

View File

@ -1,6 +1,8 @@
#include "languagechangedialog.h"
#include "ui_languagechangedialog.h"
#include <QCloseEvent>
LanguageChangeDialog::LanguageChangeDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::LanguageChangeDialog)
@ -12,3 +14,8 @@ LanguageChangeDialog::~LanguageChangeDialog()
{
delete ui;
}
void LanguageChangeDialog::closeEvent(QCloseEvent *event)
{
event->ignore();
}

View File

@ -15,6 +15,9 @@ public:
explicit LanguageChangeDialog(QWidget *parent = nullptr);
~LanguageChangeDialog();
protected slots:
void closeEvent(QCloseEvent *event) override;
private:
Ui::LanguageChangeDialog *ui;
};

View File

@ -43,12 +43,14 @@ int main(int argc, char *argv[])
w->setGeometry(screen->geometry());
w->activateBackground();
w->showFullScreen();
w->repaint();
continue;
}
BackgroundScreen *backscreen = new BackgroundScreen();
backscreen->setGeometry(screen->geometry());
backscreen->activateBackground();
backscreen->showFullScreen();
backscreen->repaint();
bss.append(backscreen);
}

View File

@ -1,11 +1,14 @@
#include "wifipassworddialog.h"
#include "ui_wifipassworddialog.h"
#include <QCloseEvent>
WifiPasswordDialog::WifiPasswordDialog(QString ssid, QWidget *parent) :
QDialog(parent),
ui(new Ui::WifiPasswordDialog)
{
ui->setupUi(this);
ui->wifiLabel->setText(tr("Enter password for %1:").arg(ssid));
connect(ui->connectButton, &QPushButton::clicked, this, &WifiPasswordDialog::onConnectClicked);
}
@ -25,3 +28,8 @@ QString WifiPasswordDialog::getPassword()
{
return password;
}
void WifiPasswordDialog::closeEvent(QCloseEvent *event)
{
event->ignore();
}

View File

@ -16,6 +16,9 @@ public:
~WifiPasswordDialog();
QString getPassword();
protected slots:
void closeEvent(QCloseEvent *event) override;
private slots:
void onConnectClicked();