Compare commits
10 Commits
ubuntu/24.
...
ubuntu/plu
Author | SHA1 | Date | |
---|---|---|---|
be65593381 | |||
baa264ea66 | |||
78162a478c | |||
|
46faa85594 | ||
|
6cb084ebf9 | ||
|
a1755c8c0a | ||
d8654e743a | |||
de09a2a3e5 | |||
284862cd31 | |||
077e01afd6 |
@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
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_AUTOUIC ON)
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
@ -12,9 +12,8 @@ set(CMAKE_INSTALL_PREFIX "/usr")
|
|||||||
|
|
||||||
find_package(ECM REQUIRED NO_MODULE)
|
find_package(ECM REQUIRED NO_MODULE)
|
||||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||||
find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core Widgets Network LinguistTools)
|
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network LinguistTools)
|
||||||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Widgets Network LinguistTools)
|
find_package(KF6 REQUIRED COMPONENTS NetworkManagerQt)
|
||||||
find_package(KF5 REQUIRED COMPONENTS NetworkManagerQt WidgetsAddons)
|
|
||||||
|
|
||||||
file(GLOB TS_FILES "src/translations/lubuntu-installer-prompt_*.ts")
|
file(GLOB TS_FILES "src/translations/lubuntu-installer-prompt_*.ts")
|
||||||
|
|
||||||
@ -43,8 +42,8 @@ set(PROJECT_SOURCES
|
|||||||
set(TRANSLATION_RESOURCES "src/translations.qrc")
|
set(TRANSLATION_RESOURCES "src/translations.qrc")
|
||||||
|
|
||||||
configure_file(${TRANSLATION_RESOURCES} translations.qrc COPYONLY)
|
configure_file(${TRANSLATION_RESOURCES} translations.qrc COPYONLY)
|
||||||
qt5_add_translation(QM_FILES ${TS_FILES})
|
qt_add_translation(QM_FILES ${TS_FILES})
|
||||||
qt5_add_resources(QM_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
|
qt_add_resources(QM_RESOURCES ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc)
|
||||||
|
|
||||||
add_custom_target(translations ALL DEPENDS ${QM_FILES})
|
add_custom_target(translations ALL DEPENDS ${QM_FILES})
|
||||||
|
|
||||||
@ -55,7 +54,7 @@ add_executable(lubuntu-installer-prompt
|
|||||||
|
|
||||||
add_dependencies(lubuntu-installer-prompt translations)
|
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
|
install(TARGETS lubuntu-installer-prompt
|
||||||
BUNDLE DESTINATION .
|
BUNDLE DESTINATION .
|
||||||
@ -65,6 +64,8 @@ install(TARGETS lubuntu-installer-prompt
|
|||||||
install(PROGRAMS "scripts/change-system-language" DESTINATION libexec)
|
install(PROGRAMS "scripts/change-system-language" DESTINATION libexec)
|
||||||
install(PROGRAMS "scripts/start-lubuntu-live-env" DESTINATION libexec)
|
install(PROGRAMS "scripts/start-lubuntu-live-env" DESTINATION libexec)
|
||||||
install(FILES "lubuntu-live-environment.desktop" DESTINATION share/xsessions)
|
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)
|
if(QT_VERSION_MAJOR EQUAL 6)
|
||||||
qt_finalize_executable(lubuntu-installer-prompt)
|
qt_finalize_executable(lubuntu-installer-prompt)
|
||||||
|
62
debian/changelog
vendored
62
debian/changelog
vendored
@ -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
|
lubuntu-installer-prompt (24.04.2) noble; urgency=medium
|
||||||
|
|
||||||
* Remove a spurious d/source/options file resulting in the whole Git repo
|
* Remove a spurious d/source/options file resulting in the whole Git repo
|
||||||
|
7
debian/control
vendored
7
debian/control
vendored
@ -7,10 +7,9 @@ Priority: optional
|
|||||||
Build-Depends: cmake,
|
Build-Depends: cmake,
|
||||||
debhelper-compat (= 13),
|
debhelper-compat (= 13),
|
||||||
extra-cmake-modules,
|
extra-cmake-modules,
|
||||||
libkf5networkmanagerqt-dev,
|
libkf6networkmanagerqt-dev,
|
||||||
libkf5widgetsaddons-dev,
|
qt6-base-dev,
|
||||||
qtbase5-dev,
|
qt6-tools-dev
|
||||||
qttools5-dev
|
|
||||||
Standards-Version: 4.6.2
|
Standards-Version: 4.6.2
|
||||||
Vcs-Browser: https://git.lubuntu.me/Lubuntu/installer-prompt-packaging
|
Vcs-Browser: https://git.lubuntu.me/Lubuntu/installer-prompt-packaging
|
||||||
Vcs-Git: https://git.lubuntu.me/Lubuntu/installer-prompt-packaging.git
|
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
50
panel.conf
Normal 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
750
rc.xml
Normal 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>
|
@ -2,17 +2,21 @@
|
|||||||
# Starts the Lubuntu Live Environment.
|
# Starts the Lubuntu Live Environment.
|
||||||
|
|
||||||
# This is pretty overkill, but don't remove anything without testing
|
# 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_DATA_DIRS="/usr/share/Lubuntu:"$XDG_DATA_DIRS
|
||||||
export XDG_SESSION_CLASS="user"
|
export XDG_SESSION_CLASS="user"
|
||||||
export XDG_SESSION_DESKTOP="Lubuntu"
|
export XDG_SESSION_DESKTOP="Lubuntu"
|
||||||
export DESKTOP_SESSION="Lubuntu"
|
export DESKTOP_SESSION="Lubuntu"
|
||||||
export QT_STYLE_OVERRIDE="Breeze"
|
export QT_STYLE_OVERRIDE="kvantum"
|
||||||
export QT_QPA_PLATFORMTHEME="lxqt"
|
export QT_QPA_PLATFORMTHEME="lxqt"
|
||||||
|
|
||||||
openbox &
|
openbox &
|
||||||
picom &
|
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...
|
# If it exits...
|
||||||
killall picom
|
killall picom
|
||||||
killall openbox
|
killall openbox
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
BackgroundScreen::BackgroundScreen(QWidget *parent)
|
BackgroundScreen::BackgroundScreen(QWidget *parent)
|
||||||
: QWidget(parent) {
|
: QWidget(parent) {
|
||||||
@ -16,25 +17,27 @@ BackgroundScreen::~BackgroundScreen()
|
|||||||
void BackgroundScreen::activateBackground()
|
void BackgroundScreen::activateBackground()
|
||||||
{
|
{
|
||||||
// Set the background image and scale it
|
// Set the background image and scale it
|
||||||
QImage image(":/background");
|
QImage rawImage(":/background");
|
||||||
if (image.isNull()) {
|
if (rawImage.isNull()) {
|
||||||
return;
|
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();
|
qreal screenRatio = static_cast<qreal>(this->width()) / this->height();
|
||||||
QImage scaled;
|
QImage scaled;
|
||||||
if (imgRatio < screenRatio) {
|
if (imgRatio < screenRatio) {
|
||||||
scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation);
|
scaled = rawImage.scaledToWidth(this->width(), Qt::SmoothTransformation);
|
||||||
int yGap = (scaled.height() - this->height()) / 2;
|
int yGap = (scaled.height() - this->height()) / 2;
|
||||||
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
|
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
|
||||||
} else {
|
} else {
|
||||||
scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation);
|
scaled = rawImage.scaledToHeight(this->height(), Qt::SmoothTransformation);
|
||||||
int xGap = (scaled.width() - this->width()) / 2;
|
int xGap = (scaled.width() - this->width()) / 2;
|
||||||
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
|
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
|
||||||
}
|
}
|
||||||
QPixmap bg = QPixmap::fromImage(scaled);
|
background = scaled;
|
||||||
QPalette palette;
|
}
|
||||||
palette.setBrush(QPalette::Window, bg);
|
|
||||||
this->setPalette(palette);
|
void BackgroundScreen::paintEvent(QPaintEvent *event) {
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.drawImage(0, 0, background);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,10 @@ public:
|
|||||||
explicit BackgroundScreen(QWidget *parent = nullptr);
|
explicit BackgroundScreen(QWidget *parent = nullptr);
|
||||||
virtual ~BackgroundScreen();
|
virtual ~BackgroundScreen();
|
||||||
void activateBackground();
|
void activateBackground();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
QImage background;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BACKGROUNDSCREEN_H
|
#endif // BACKGROUNDSCREEN_H
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include "connectionprogressdialog.h"
|
#include "connectionprogressdialog.h"
|
||||||
#include "ui_connectionprogressdialog.h"
|
#include "ui_connectionprogressdialog.h"
|
||||||
|
|
||||||
|
#include <QCloseEvent>
|
||||||
|
|
||||||
ConnectionProgressDialog::ConnectionProgressDialog(QWidget *parent) :
|
ConnectionProgressDialog::ConnectionProgressDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::ConnectionProgressDialog)
|
ui(new Ui::ConnectionProgressDialog)
|
||||||
@ -17,3 +19,8 @@ void ConnectionProgressDialog::setNetworkName(QString name)
|
|||||||
{
|
{
|
||||||
ui->label->setText(tr("Connecting to %1...").arg(name));
|
ui->label->setText(tr("Connecting to %1...").arg(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConnectionProgressDialog::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
@ -16,6 +16,9 @@ public:
|
|||||||
~ConnectionProgressDialog();
|
~ConnectionProgressDialog();
|
||||||
void setNetworkName(QString name);
|
void setNetworkName(QString name);
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void closeEvent(QCloseEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::ConnectionProgressDialog *ui;
|
Ui::ConnectionProgressDialog *ui;
|
||||||
};
|
};
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
|
#include <QPainter>
|
||||||
#include <QDBusPendingReply>
|
#include <QDBusPendingReply>
|
||||||
#include "installerprompt.h"
|
#include "installerprompt.h"
|
||||||
#include "wifipassworddialog.h"
|
#include "wifipassworddialog.h"
|
||||||
@ -44,8 +45,6 @@ InstallerPrompt::InstallerPrompt(QWidget *parent)
|
|||||||
|
|
||||||
cpd = new ConnectionProgressDialog();
|
cpd = new ConnectionProgressDialog();
|
||||||
|
|
||||||
updateConnectionInfo();
|
|
||||||
|
|
||||||
initLanguageComboBox();
|
initLanguageComboBox();
|
||||||
|
|
||||||
connect(ui->tryLubuntu, &QPushButton::clicked, this, &InstallerPrompt::onTryClicked);
|
connect(ui->tryLubuntu, &QPushButton::clicked, this, &InstallerPrompt::onTryClicked);
|
||||||
@ -65,6 +64,8 @@ InstallerPrompt::InstallerPrompt(QWidget *parent)
|
|||||||
QTimer *repeater = new QTimer();
|
QTimer *repeater = new QTimer();
|
||||||
connect(repeater, SIGNAL(timeout()), this, SLOT(updateConnectionInfo()));
|
connect(repeater, SIGNAL(timeout()), this, SLOT(updateConnectionInfo()));
|
||||||
repeater->start(15000);
|
repeater->start(15000);
|
||||||
|
|
||||||
|
updateConnectionInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
InstallerPrompt::~InstallerPrompt()
|
InstallerPrompt::~InstallerPrompt()
|
||||||
@ -75,28 +76,25 @@ InstallerPrompt::~InstallerPrompt()
|
|||||||
void InstallerPrompt::activateBackground()
|
void InstallerPrompt::activateBackground()
|
||||||
{
|
{
|
||||||
// Set the background image and scale it
|
// Set the background image and scale it
|
||||||
QImage image(":/background");
|
QImage rawImage(":/background");
|
||||||
if (image.isNull()) {
|
if (rawImage.isNull()) {
|
||||||
WarningDialog::showWarning(tr("Background image cannot be loaded."));
|
WarningDialog::showWarning(tr("Background image cannot be loaded."));
|
||||||
return;
|
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();
|
qreal screenRatio = static_cast<qreal>(this->width()) / this->height();
|
||||||
QImage scaled;
|
QImage scaled;
|
||||||
if (imgRatio < screenRatio) {
|
if (imgRatio < screenRatio) {
|
||||||
scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation);
|
scaled = rawImage.scaledToWidth(this->width(), Qt::SmoothTransformation);
|
||||||
int yGap = (scaled.height() - this->height()) / 2;
|
int yGap = (scaled.height() - this->height()) / 2;
|
||||||
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
|
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
|
||||||
} else {
|
} else {
|
||||||
scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation);
|
scaled = rawImage.scaledToHeight(this->height(), Qt::SmoothTransformation);
|
||||||
int xGap = (scaled.width() - this->width()) / 2;
|
int xGap = (scaled.width() - this->width()) / 2;
|
||||||
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
|
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
|
||||||
}
|
}
|
||||||
QPixmap bg = QPixmap::fromImage(scaled);
|
background = scaled;
|
||||||
QPalette palette;
|
|
||||||
palette.setBrush(QPalette::Window, bg);
|
|
||||||
this->setPalette(palette);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstallerPrompt::onTryClicked()
|
void InstallerPrompt::onTryClicked()
|
||||||
@ -175,7 +173,7 @@ void InstallerPrompt::onNetworkSelected(int index)
|
|||||||
QString networkId = ui->networkComboBox->itemData(index).toString();
|
QString networkId = ui->networkComboBox->itemData(index).toString();
|
||||||
if (!networkId.isNull()) {
|
if (!networkId.isNull()) {
|
||||||
if (networkId.left(4) == "UNI_") { // this is an Ethernet device
|
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);
|
NetworkManager::WiredDevice wiredDevice(deviceUni);
|
||||||
QDBusPendingReply reply = wiredDevice.disconnectInterface();
|
QDBusPendingReply reply = wiredDevice.disconnectInterface();
|
||||||
reply.waitForFinished();
|
reply.waitForFinished();
|
||||||
@ -317,11 +315,15 @@ void InstallerPrompt::updateConnectionInfo()
|
|||||||
ui->networkComboBox->setCurrentIndex(connectedDevice);
|
ui->networkComboBox->setCurrentIndex(connectedDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!firstUpdateConnectionInfoCall) {
|
||||||
if (NetworkManager::status() == NetworkManager::Connecting) {
|
if (NetworkManager::status() == NetworkManager::Connecting) {
|
||||||
cpd->exec();
|
cpd->exec();
|
||||||
} else {
|
} else {
|
||||||
cpd->done(0);
|
cpd->done(0);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
firstUpdateConnectionInfoCall = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstallerPrompt::handleWiFiConnectionChange(NetworkManager::Device::State newstate, NetworkManager::Device::State oldstate, NetworkManager::Device::StateChangeReason reason)
|
void InstallerPrompt::handleWiFiConnectionChange(NetworkManager::Device::State newstate, NetworkManager::Device::State oldstate, NetworkManager::Device::StateChangeReason reason)
|
||||||
@ -426,9 +428,9 @@ QString InstallerPrompt::getDisplayNameForLocale(const QLocale &locale) {
|
|||||||
|
|
||||||
QLocale currentAppLocale = QLocale::system();
|
QLocale currentAppLocale = QLocale::system();
|
||||||
QString nativeName = locale.nativeLanguageName();
|
QString nativeName = locale.nativeLanguageName();
|
||||||
QString nativeCountryName = sanitize(locale.nativeCountryName());
|
QString nativeCountryName = sanitize(locale.nativeTerritoryName());
|
||||||
QString englishLanguageName = currentAppLocale.languageToString(locale.language());
|
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()) {
|
if (nativeName.isEmpty() || nativeCountryName.isEmpty()) {
|
||||||
return QString();
|
return QString();
|
||||||
@ -448,3 +450,8 @@ QString InstallerPrompt::getDisplayNameForLocale(const QLocale &locale) {
|
|||||||
|
|
||||||
return displayName;
|
return displayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InstallerPrompt::paintEvent(QPaintEvent *event) {
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.drawImage(0, 0, background);
|
||||||
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
|
#include <QImage>
|
||||||
#include <NetworkManagerQt/Device>
|
#include <NetworkManagerQt/Device>
|
||||||
#include <NetworkManagerQt/WirelessDevice>
|
#include <NetworkManagerQt/WirelessDevice>
|
||||||
#include <NetworkManagerQt/WiredDevice>
|
#include <NetworkManagerQt/WiredDevice>
|
||||||
@ -44,10 +45,13 @@ private:
|
|||||||
QString wifiSsid;
|
QString wifiSsid;
|
||||||
bool wifiWrongHandling = false;
|
bool wifiWrongHandling = false;
|
||||||
QMap<QString, QString> languageLocaleMap;
|
QMap<QString, QString> languageLocaleMap;
|
||||||
|
bool firstUpdateConnectionInfoCall = true;
|
||||||
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
|
||||||
void initLanguageComboBox();
|
void initLanguageComboBox();
|
||||||
QStringList getAvailableLanguages();
|
QStringList getAvailableLanguages();
|
||||||
QString getDisplayNameForLocale(const QLocale &locale);
|
QString getDisplayNameForLocale(const QLocale &locale);
|
||||||
|
QImage background;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INSTALLERPROMPT_H
|
#endif // INSTALLERPROMPT_H
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1450</width>
|
<width>1450</width>
|
||||||
<height>710</height>
|
<height>604</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
@ -19,6 +19,9 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Try or Install Lubuntu</string>
|
<string>Try or Install Lubuntu</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">QWidget {
|
<string notr="true">QWidget {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
@ -515,7 +518,6 @@ QToolTip {
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="resource.qrc"/>
|
<include location="resource.qrc"/>
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#include "languagechangedialog.h"
|
#include "languagechangedialog.h"
|
||||||
#include "ui_languagechangedialog.h"
|
#include "ui_languagechangedialog.h"
|
||||||
|
|
||||||
|
#include <QCloseEvent>
|
||||||
|
|
||||||
LanguageChangeDialog::LanguageChangeDialog(QWidget *parent) :
|
LanguageChangeDialog::LanguageChangeDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::LanguageChangeDialog)
|
ui(new Ui::LanguageChangeDialog)
|
||||||
@ -12,3 +14,8 @@ LanguageChangeDialog::~LanguageChangeDialog()
|
|||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LanguageChangeDialog::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
@ -15,6 +15,9 @@ public:
|
|||||||
explicit LanguageChangeDialog(QWidget *parent = nullptr);
|
explicit LanguageChangeDialog(QWidget *parent = nullptr);
|
||||||
~LanguageChangeDialog();
|
~LanguageChangeDialog();
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void closeEvent(QCloseEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::LanguageChangeDialog *ui;
|
Ui::LanguageChangeDialog *ui;
|
||||||
};
|
};
|
||||||
|
@ -43,12 +43,14 @@ int main(int argc, char *argv[])
|
|||||||
w->setGeometry(screen->geometry());
|
w->setGeometry(screen->geometry());
|
||||||
w->activateBackground();
|
w->activateBackground();
|
||||||
w->showFullScreen();
|
w->showFullScreen();
|
||||||
|
w->repaint();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
BackgroundScreen *backscreen = new BackgroundScreen();
|
BackgroundScreen *backscreen = new BackgroundScreen();
|
||||||
backscreen->setGeometry(screen->geometry());
|
backscreen->setGeometry(screen->geometry());
|
||||||
backscreen->activateBackground();
|
backscreen->activateBackground();
|
||||||
backscreen->showFullScreen();
|
backscreen->showFullScreen();
|
||||||
|
backscreen->repaint();
|
||||||
bss.append(backscreen);
|
bss.append(backscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
#include "wifipassworddialog.h"
|
#include "wifipassworddialog.h"
|
||||||
#include "ui_wifipassworddialog.h"
|
#include "ui_wifipassworddialog.h"
|
||||||
|
|
||||||
|
#include <QCloseEvent>
|
||||||
|
|
||||||
WifiPasswordDialog::WifiPasswordDialog(QString ssid, QWidget *parent) :
|
WifiPasswordDialog::WifiPasswordDialog(QString ssid, QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::WifiPasswordDialog)
|
ui(new Ui::WifiPasswordDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
ui->wifiLabel->setText(tr("Enter password for %1:").arg(ssid));
|
ui->wifiLabel->setText(tr("Enter password for %1:").arg(ssid));
|
||||||
connect(ui->connectButton, &QPushButton::clicked, this, &WifiPasswordDialog::onConnectClicked);
|
connect(ui->connectButton, &QPushButton::clicked, this, &WifiPasswordDialog::onConnectClicked);
|
||||||
}
|
}
|
||||||
@ -25,3 +28,8 @@ QString WifiPasswordDialog::getPassword()
|
|||||||
{
|
{
|
||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WifiPasswordDialog::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
@ -16,6 +16,9 @@ public:
|
|||||||
~WifiPasswordDialog();
|
~WifiPasswordDialog();
|
||||||
QString getPassword();
|
QString getPassword();
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void closeEvent(QCloseEvent *event) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onConnectClicked();
|
void onConnectClicked();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user