parent
6963916e29
commit
eb245c4ee8
@ -0,0 +1,27 @@
|
||||
include(LXQtTranslateDesktop)
|
||||
include(LXQtConfigVars)
|
||||
|
||||
# startlxqt script
|
||||
set(PREDEF_XDG_DATA_DIRS "$XDG_DATA_HOME")
|
||||
if(NOT("${LXQT_DATA_DIR}" MATCHES "^/usr(/local)?/share$"))
|
||||
set(PREDEF_XDG_DATA_DIRS "${PREDEF_XDG_DATA_DIRS}:${LXQT_DATA_DIR}")
|
||||
endif()
|
||||
set(PREDEF_XDG_DATA_DIRS "${PREDEF_XDG_DATA_DIRS}:/usr/local/share:/usr/share")
|
||||
configure_file(startlxqt.in startlxqt @ONLY)
|
||||
install(PROGRAMS
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/startlxqt"
|
||||
DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
COMPONENT Runtime
|
||||
)
|
||||
install(FILES
|
||||
startlxqt.1
|
||||
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
|
||||
COMPONENT Runtime
|
||||
)
|
||||
|
||||
# default config files
|
||||
add_subdirectory(config)
|
||||
add_subdirectory(autostart)
|
||||
|
||||
# xsession *.desktop file for display managers
|
||||
add_subdirectory(xsession)
|
@ -0,0 +1,17 @@
|
||||
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
|
||||
|
||||
file(GLOB DESKTOP_FILES_IN *.desktop.in)
|
||||
|
||||
# Translations **********************************
|
||||
lxqt_translate_desktop(DESKTOP_FILES
|
||||
SOURCES
|
||||
${DESKTOP_FILES_IN}
|
||||
)
|
||||
add_custom_target(lxqt_sesstion_autostart_desktop_files ALL DEPENDS ${DESKTOP_FILES})
|
||||
#************************************************
|
||||
|
||||
install(FILES
|
||||
${DESKTOP_FILES}
|
||||
DESTINATION "${LXQT_ETC_XDG_DIR}/autostart"
|
||||
COMPONENT Runtime
|
||||
)
|
@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Name=XScreenSaver
|
||||
TryExec=xscreensaver
|
||||
Exec=xscreensaver -no-splash
|
||||
OnlyShowIn=LXQt;
|
||||
|
||||
#TRANSLATIONS_DIR=translations
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[ar]=حافظ الشَّاشة
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[cs]=Šetřič obrazovky
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[cs_CZ]=Šetřič obrazovky
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[da]=Pauseskærm
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[de]=Bildschirmschoner
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[eo]=XEkranKurteno
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[es]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[es_VE]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[eu]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[fi]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[fr_FR]=XScreenSaver
|
@ -0,0 +1 @@
|
||||
# Translations
|
@ -0,0 +1 @@
|
||||
# Translations
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[id_ID]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[it_IT]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[ja]=Xスクリーンセーバ
|
@ -0,0 +1 @@
|
||||
# Translations
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[lt]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[nl]=X-schermbeveiliging
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[pl_PL]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[pt]=Proteção de ecrã
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[pt_BR]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[ro_RO]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[ru_RU]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[sl]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[sr]=Икс-ЧуварЕкрана
|
@ -0,0 +1 @@
|
||||
Name[sr@ijekavian]=Икс-ЧуварЕкрана
|
@ -0,0 +1 @@
|
||||
Name[sr@ijekavianlatin]=Iks-ČuvarEkrana
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[sr@latin]=Iks-ČuvarEkrana
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[th_TH]=โปรแกรมรักษาหน้าจอของX
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[tr]=XScreenSaver
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[uk]=XScreenSaver
|
@ -0,0 +1 @@
|
||||
# Translations
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[zh_CN]=屏保
|
@ -0,0 +1,2 @@
|
||||
# Translations
|
||||
Name[zh_TW]=螢幕保護程式
|
@ -0,0 +1,12 @@
|
||||
# install default config files to /etc/xdg
|
||||
install(FILES
|
||||
lxqt.conf
|
||||
session.conf
|
||||
windowmanagers.conf
|
||||
DESTINATION "${LXQT_ETC_XDG_DIR}/lxqt"
|
||||
COMPONENT Runtime
|
||||
)
|
||||
install(DIRECTORY openbox
|
||||
DESTINATION "${LXQT_ETC_XDG_DIR}"
|
||||
COMPONENT Runtime
|
||||
)
|
@ -0,0 +1,11 @@
|
||||
[General]
|
||||
theme=frost
|
||||
icon_theme=oxygen
|
||||
single_click_activate=false
|
||||
tool_button_style=ToolButtonTextBesideIcon
|
||||
|
||||
[Qt]
|
||||
font="Sans,11,-1,5,50,0,0,0,0,0"
|
||||
doubleClickInterval=400
|
||||
style=Fusion
|
||||
wheelScrollLines=3
|
@ -0,0 +1,744 @@
|
||||
<?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/lxqt-rc.xml 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>
|
||||
<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>Primary</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>1</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>
|
||||
<name>Onyx</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>sans</name>
|
||||
<size>10</size>
|
||||
<!-- font size in points -->
|
||||
<weight>bold</weight>
|
||||
<!-- 'bold' or 'normal' -->
|
||||
<slant>normal</slant>
|
||||
<!-- 'italic' or 'normal' -->
|
||||
</font>
|
||||
<font place="InactiveWindow">
|
||||
<name>sans</name>
|
||||
<size>10</size>
|
||||
<!-- font size in points -->
|
||||
<weight>bold</weight>
|
||||
<!-- 'bold' or 'normal' -->
|
||||
<slant>normal</slant>
|
||||
<!-- 'italic' or 'normal' -->
|
||||
</font>
|
||||
<font place="MenuHeader">
|
||||
<name>sans</name>
|
||||
<size>9</size>
|
||||
<!-- font size in points -->
|
||||
<weight>normal</weight>
|
||||
<!-- 'bold' or 'normal' -->
|
||||
<slant>normal</slant>
|
||||
<!-- 'italic' or 'normal' -->
|
||||
</font>
|
||||
<font place="MenuItem">
|
||||
<name>sans</name>
|
||||
<size>9</size>
|
||||
<!-- font size in points -->
|
||||
<weight>normal</weight>
|
||||
<!-- 'bold' or 'normal' -->
|
||||
<slant>normal</slant>
|
||||
<!-- 'italic' or 'normal' -->
|
||||
</font>
|
||||
<font place="ActiveOnScreenDisplay">
|
||||
<name>sans</name>
|
||||
<size>9</size>
|
||||
<!-- font size in points -->
|
||||
<weight>bold</weight>
|
||||
<!-- 'bold' or 'normal' -->
|
||||
<slant>normal</slant>
|
||||
<!-- 'italic' or 'normal' -->
|
||||
</font>
|
||||
<font place="InactiveOnScreenDisplay">
|
||||
<name>sans</name>
|
||||
<size>9</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 -->
|
||||
<number>2</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>
|
||||
<drawContents>yes</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="S-A-Left">
|
||||
<action name="SendToDesktop"><to>left</to><wrap>no</wrap></action>
|
||||
</keybind>
|
||||
<keybind key="S-A-Right">
|
||||
<action name="SendToDesktop"><to>right</to><wrap>no</wrap></action>
|
||||
</keybind>
|
||||
<keybind key="S-A-Up">
|
||||
<action name="SendToDesktop"><to>up</to><wrap>no</wrap></action>
|
||||
</keybind>
|
||||
<keybind key="S-A-Down">
|
||||
<action name="SendToDesktop"><to>down</to><wrap>no</wrap></action>
|
||||
</keybind>
|
||||
<keybind key="W-F1">
|
||||
<action name="GoToDesktop"><to>1</to></action>
|
||||
</keybind>
|
||||
<keybind key="W-F2">
|
||||
<action name="GoToDesktop"><to>2</to></action>
|
||||
</keybind>
|
||||
<keybind key="W-F3">
|
||||
<action name="GoToDesktop"><to>3</to></action>
|
||||
</keybind>
|
||||
<keybind key="W-F4">
|
||||
<action name="GoToDesktop"><to>4</to></action>
|
||||
</keybind>
|
||||
<keybind key="W-d">
|
||||
<action name="ToggleShowDesktop"/>
|
||||
</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>
|
||||
</action>
|
||||
</keybind>
|
||||
<keybind key="A-S-Tab">
|
||||
<action name="PreviousWindow">
|
||||
<finalactions>
|
||||
<action name="Focus"/>
|
||||
<action name="Raise"/>
|
||||
<action name="Unshade"/>
|
||||
</finalactions>
|
||||
</action>
|
||||
</keybind>
|
||||
<keybind key="C-A-Tab">
|
||||
<action name="NextWindow">
|
||||
<panels>yes</panels><desktop>yes</desktop>
|
||||
<finalactions>
|
||||
<action name="Focus"/>
|
||||
<action name="Raise"/>
|
||||
<action name="Unshade"/>
|
||||
</finalactions>
|
||||
</action>
|
||||
</keybind>
|
||||
|
||||
<!-- Keybindings for window switching with the arrow keys -->
|
||||
<keybind key="W-S-Right">
|
||||
<action name="DirectionalCycleWindows">
|
||||
<direction>right</direction>
|
||||
</action>
|
||||
</keybind>
|
||||
<keybind key="W-S-Left">
|
||||
<action name="DirectionalCycleWindows">
|
||||
<direction>left</direction>
|
||||
</action>
|
||||
</keybind>
|
||||
<keybind key="W-S-Up">
|
||||
<action name="DirectionalCycleWindows">
|
||||
<direction>up</direction>
|
||||
</action>
|
||||
</keybind>
|
||||
<keybind key="W-S-Down">
|
||||
<action name="DirectionalCycleWindows">
|
||||
<direction>down</direction>
|
||||
</action>
|
||||
</keybind>
|
||||
|
||||
<!-- Keybindings for running applications.
|
||||
Commented out as application shortcuts should be handled by lxqt-globalkeys in LXQt sessions.
|
||||
<keybind key="W-q">
|
||||
<action name="Execute">
|
||||
<startupnotify>
|
||||
<enabled>true</enabled>
|
||||
<name>Qupzilla</name>
|
||||
</startupnotify>
|
||||
<command>qupzilla</command>
|
||||
</action>
|
||||
</keybind> -->
|
||||
</keyboard>
|
||||
|
||||
<mouse>
|
||||
<dragThreshold>1</dragThreshold>
|
||||
<!-- number of pixels the mouse must move before a drag begins -->
|
||||
<doubleClickTime>500</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 -->
|
||||
|
||||
<!-- 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 -->
|
||||
<showIcons>yes</showIcons>
|
||||
<!-- controls if icons appear in the client-list-(combined-)menu -->
|
||||
<manageDesktops>yes</manageDesktops>
|
||||
<!-- show the manage desktops section 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
|
||||
-->
|
||||
</applications>
|
||||
|
||||
</openbox_config>
|
@ -0,0 +1,24 @@
|
||||
[General]
|
||||
window_manager=openbox
|
||||
leave_confirmation=true
|
||||
|
||||
[Environment]
|
||||
GTK_CSD=0
|
||||
GTK_OVERLAY_SCROLLING=0
|
||||
|
||||
[Mouse]
|
||||
cursor_size=18
|
||||
cursor_theme=whiteglass
|
||||
acc_factor=20
|
||||
acc_threshold=10
|
||||
left_handed=false
|
||||
|
||||
[Keyboard]
|
||||
delay=500
|
||||
interval=30
|
||||
beep=false
|
||||
|
||||
[Font]
|
||||
antialias=true
|
||||
hinting=true
|
||||
dpi=96
|
@ -0,0 +1,26 @@
|
||||
[KnownManagers]
|
||||
openbox/Name=Openbox
|
||||
openbox/Comment=Light-weight window manager
|
||||
|
||||
kwin/Name=KWin
|
||||
kwin/Comment=Window manager of the KDE Software Compilation
|
||||
|
||||
kwin_x11/Name=KWin
|
||||
kwin_x11/Comment=Window manager of the KDE Software Compilation
|
||||
|
||||
metacity/Name=Metacity
|
||||
metacity/Comment=Window manager of the GNOME desktop environment
|
||||
|
||||
windowmaker/Name=Windowmaker
|
||||
windowmaker/Comment=A classical lightweight window manager
|
||||
|
||||
e16/Name=Enlightenement 16
|
||||
|
||||
fvwm2/Name=Fvwm2
|
||||
fvwm2/Comment=A classical lightweight window manager
|
||||
|
||||
xfwm4/Name=Xfwm4
|
||||
xfwm4/Comment=A window manager for the Xfce desktop environment
|
||||
|
||||
sawfish/Name=Sawfish
|
||||
sawfish/Comment="A lightweight, flexible window manager"
|
@ -1,4 +1,4 @@
|
||||
# Translations
|
||||
Comment[eu]=Konfiguratu LXQt saioaren modulua
|
||||
GenericName[eu]=LXQt saioaren konfiguratzailea
|
||||
Name[eu]=LXQt saioaren konfiguratzailea
|
||||
Comment[eu]=LXQt saioen konfigurazioa
|
||||
GenericName[eu]=LXQt saioaren ezarpenak
|
||||
Name[eu]=Saioaren ezarpenak
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Translations
|
||||
Comment[lt]=Konfigūruoti LXQt sesijų modulį
|
||||
GenericName[lt]=LXQt sesijų konfigūravimas
|
||||
Name[lt]=LXQt sesijų konfigūravimas
|
||||
Comment[lt]=LXQt seansų konfigūravimas
|
||||
GenericName[lt]=LXQt seansų nustatymai
|
||||
Name[lt]=Seanso nustatymai
|
||||
|
@ -0,0 +1,241 @@
|
||||
/* BEGIN_COMMON_COPYRIGHT_HEADER
|
||||
* (c)LGPL2+
|
||||
*
|
||||
* LXQt - a lightweight, Qt based, desktop toolset
|
||||
* http://lxqt.org/
|
||||
*
|
||||
* Copyright: 2017 LXQt team
|
||||
* Authors:
|
||||
* Palo Kisa <palo.kisa@gmail.com>
|
||||
*
|
||||
* This program or library is free software; you can redistribute it
|
||||
* and/or modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General
|
||||
* Public License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
* END_COMMON_COPYRIGHT_HEADER */
|
||||
|
||||
#include "listwidget.h"
|
||||
#include <QItemDelegate>
|
||||
#include <QApplication>
|
||||
#include <QKeyEvent>
|
||||
|
||||
/*!
|
||||
* This private delegate does:
|
||||
* - returns unified sizeHint() -> maximum of all items in (list) model
|
||||
* - cahes the sizeHint() to not iterate over all items and checking their size
|
||||
* - overrides decoration position to Qt::Top
|
||||
* - gives the items margins (increasing sizeHint()) ~~and mimics Button visual~~
|
||||
* - overrides painting the focus around the whole item (with the decoration)
|
||||
*
|
||||
* \note It is a single purpose delegate and expects, that the model
|
||||
* never changes (cached sizeHint() is never invalidated).
|
||||
*/
|
||||
class ItemDelegate : public QItemDelegate
|
||||
{
|
||||
public:
|
||||
static constexpr QMargins MARGINS{5, 5, 5, 5};
|
||||
public:
|
||||
using QItemDelegate::QItemDelegate;
|
||||
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
|
||||
{
|
||||
if (mItemSize.isValid())
|
||||
return mItemSize;
|
||||
|
||||
// compute maximum item size
|
||||
QStyleOptionViewItem opt = option;
|
||||
opt.decorationPosition = QStyleOptionViewItem::Top;
|
||||
QAbstractListModel const * model = qobject_cast<QAbstractListModel const *>(index.model());
|
||||
for (QModelIndex i = model->index(0); i.isValid(); i = model->index(i.row() + 1))
|
||||
{
|
||||
mItemSize = mItemSize.expandedTo(QItemDelegate::sizeHint(opt, i));
|
||||
}
|
||||
mItemSize += {MARGINS.left() + MARGINS.right(), MARGINS.top() + MARGINS.bottom()}; // add some margins
|
||||
return mItemSize;
|
||||
}
|
||||
|
||||
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
|
||||
{
|
||||
/*
|
||||
// mimic the button visual
|
||||
QStyleOption button_option;
|
||||
button_option.initFrom(option.widget);
|
||||
button_option.rect = option.rect;
|
||||
if (!(option.state & QStyle::State_HasFocus))
|
||||
button_option.state &= ~QStyle::State_HasFocus;
|
||||
QStyle * style = option.widget->style() ? option.widget->style() : QApplication::style();
|
||||
style->drawPrimitive(QStyle::PE_PanelButtonTool, &button_option, painter, option.widget);
|
||||
*/
|
||||
QStyleOptionViewItem opt = option;
|
||||
opt.decorationPosition = QStyleOptionViewItem::Top;
|
||||
opt.displayAlignment = Qt::AlignHCenter | Qt::AlignTop;
|
||||
return QItemDelegate::paint(painter, opt, index);
|
||||
}
|
||||
|
||||
protected:
|
||||
// Note: We want to paint the focus rectangle around the whole (text+icon)
|
||||
// (default in QItemDelegate is to draw the focus only in text rectangle)
|
||||
virtual void drawFocus(QPainter *painter
|
||||
, const QStyleOptionViewItem &option
|
||||
, const QRect &/*rect*/) const override
|
||||
{
|
||||
// don't override the rectangle to the text-only
|
||||
return QItemDelegate::drawFocus(painter, option, option.rect);
|
||||
}
|
||||
|
||||
virtual void drawDisplay(QPainter *painter
|
||||
, const QStyleOptionViewItem &option
|
||||
, const QRect &rect
|
||||
, const QString &text) const override
|
||||
{
|
||||
// shrink (and move to bottom) the text rectangle
|
||||
QRect r = rect.adjusted(0, MARGINS.top(), 0, 0);
|
||||
return QItemDelegate::drawDisplay(painter, option, r, text);
|
||||
}
|
||||
|
||||
virtual void drawDecoration(QPainter *painter
|
||||
, const QStyleOptionViewItem &option
|
||||
, const QRect &rect
|
||||
, const QPixmap &pixmap) const override
|
||||
{
|
||||
// move to bottom the pixmap rectangle
|
||||
QRect r = rect.translated(0, MARGINS.top());
|
||||
return QItemDelegate::drawDecoration(painter, option, r, pixmap);
|
||||
}
|
||||
private:
|
||||
mutable QSize mItemSize; //!< the cached (unified/max) item size
|
||||
};
|
||||
constexpr QMargins ItemDelegate::MARGINS;
|
||||
|
||||
ListWidget::ListWidget(QWidget * parent/* = nullptr*/)
|
||||
: QListWidget{parent}
|
||||
, mRows(3)
|
||||
, mColumns(3)
|
||||
{
|
||||
ItemDelegate * delegate = new ItemDelegate{this};
|
||||
{
|
||||
QScopedPointer<QAbstractItemDelegate> old_del{itemDelegate()};
|
||||
setItemDelegate(delegate);
|
||||
}
|
||||
}
|
||||
|
||||
void ListWidget::setRows(int rows)
|
||||
{
|
||||
mRows = rows;
|
||||
}
|
||||
|
||||
void ListWidget::setColumns(int columns)
|
||||
{
|
||||
mColumns = columns;
|
||||
}
|
||||
|
||||
QSize ListWidget::viewportSizeHint() const
|
||||
{
|
||||
QSize size = sizeHintForIndex(model()->index(0, 0));
|
||||
size.rwidth() = size.width() * mColumns + spacing() * mColumns * 2 + 1;
|
||||
size.rheight() = size.height() * mRows + spacing() * mRows * 2 + 1;
|
||||
return size;
|
||||
}
|
||||
|
||||
QModelIndex ListWidget::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers/* modifiers*/)
|
||||
{
|
||||
QModelIndex index = currentIndex();
|
||||
int count = model()->rowCount(rootIndex());
|
||||
int current = 0;
|
||||
if (index.isValid())
|
||||
{
|
||||
current = index.row();
|
||||
index = QModelIndex{}; // setting to invalid to get inside the for loop (move the position)
|
||||
} else
|
||||
{
|
||||
current = cursorAction == MovePrevious ? count - 1 : 0;
|
||||
index = model()->index(current, 0, rootIndex());
|
||||
}
|
||||
|
||||
// if not enabled, try to find any next enabled
|
||||
for (int tries = 1; tries < count && 0 == (model()->flags(index) & Qt::ItemIsEnabled); ++tries)
|
||||
{
|
||||
int next;
|
||||
switch (cursorAction)
|
||||
{
|
||||
case MoveUp:
|
||||
case MovePageUp:
|
||||
next = (current - mColumns) % count;
|
||||
break;
|
||||
case MoveDown:
|
||||
case MovePageDown:
|
||||
next = (current + mColumns) % count;
|
||||
break;
|
||||
case MoveLeft:
|
||||
if (0 == (current % mColumns))
|
||||
current += mColumns;
|
||||
// fall through
|
||||
case MovePrevious:
|
||||
if (current == 0)
|
||||
return QModelIndex{};
|
||||
next = (current - 1) % count;
|
||||
break;
|
||||
case MoveRight:
|
||||
if ((mColumns - 1) == (current % mColumns))
|
||||
current -= mColumns;
|
||||
// fall through
|
||||
case MoveNext:
|
||||
if (current == count - 1)
|
||||
return QModelIndex{};
|
||||
next = (current + 1) % count;
|
||||
break;
|
||||
case MoveHome:
|
||||
next = 0;
|
||||
break;
|
||||
case MoveEnd:
|
||||
next = count - 1;
|
||||
break;
|
||||
}
|
||||
if (next < 0)
|
||||
next += count;
|
||||
|
||||
index = model()->index(next, 0, rootIndex());
|
||||
current = next;
|
||||
}
|
||||
return index;
|
||||
|
||||
}
|
||||
|
||||
void ListWidget::keyPressEvent(QKeyEvent * event)
|
||||
{
|
||||
if (event->key() == Qt::Key_Space)
|
||||
{
|
||||
// mimic the "enter" to fire activated
|
||||
QKeyEvent k{event->type(), Qt::Key_Enter, event->modifiers(), event->text(), event->isAutoRepeat(), static_cast<ushort>(event->count())};
|
||||
QListWidget::keyPressEvent(&k);
|
||||
event->setAccepted(k.isAccepted());
|
||||
return;
|
||||
}
|
||||
return QListWidget::keyPressEvent(event);
|
||||
}
|
||||
|
||||
void ListWidget::focusInEvent(QFocusEvent * event)
|
||||
{
|
||||
switch (event->reason())
|
||||
{
|
||||
case Qt::TabFocusReason:
|
||||
setCurrentIndex(model()->index(0, 0, rootIndex()));
|
||||
break;
|
||||
case Qt::BacktabFocusReason:
|
||||
setCurrentIndex(model()->index(model()->rowCount(rootIndex()) - 1, 0, rootIndex()));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return QListWidget::focusInEvent(event);
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/* BEGIN_COMMON_COPYRIGHT_HEADER
|
||||
* (c)LGPL2+
|
||||
*
|
||||
* LXQt - a lightweight, Qt based, desktop toolset
|
||||
* http://lxqt.org/
|
||||
*
|
||||
* Copyright: 2017 LXQt team
|
||||
* Authors:
|
||||
* Palo Kisa <palo.kisa@gmail.com>
|
||||
*
|
||||
* This program or library is free software; you can redistribute it
|
||||
* and/or modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General
|
||||
* Public License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301 USA
|
||||
*
|
||||
* END_COMMON_COPYRIGHT_HEADER */
|
||||
|
||||
#include <QListWidget>
|
||||
|
||||
/*!
|
||||
* Single purpose QListWidget with unified item sizes (based on the
|
||||
* biggest item) and showing rows x columns items.
|
||||
*
|
||||
* \note It expects that items aren't ever changed after show().
|
||||
*/
|
||||
class ListWidget : public QListWidget
|
||||
{
|
||||
public:
|
||||
ListWidget(QWidget * parent = nullptr);
|
||||
void setRows(int rows);
|
||||
void setColumns(int columns);
|
||||
|
||||
protected:
|
||||
virtual QSize viewportSizeHint() const override;
|
||||
virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override;
|
||||
virtual void keyPressEvent(QKeyEvent * event) override;
|
||||
virtual void focusInEvent(QFocusEvent * event) override;
|
||||
|
||||
private:
|
||||
int mRows;
|
||||
int mColumns;
|
||||
};
|
@ -0,0 +1,4 @@
|
||||
#Translations
|
||||
Name[eu]=Hibernatu
|
||||
GenericName[eu]=Hibernatu
|
||||
Comment[eu]=Hibernatu ordenagailua
|
@ -0,0 +1,3 @@
|
||||
Name[lt]=Užmigdyti
|
||||
GenericName[lt]=Užmigdyti
|
||||
Comment[lt]=Užmigdyti kompiuterį
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[eu]=Utzi
|
||||
GenericName[eu]=Utzi
|
||||
Comment[eu]=Utzi elkarrizketa-koadroa
|
@ -0,0 +1,3 @@
|
||||
Name[lt]=Išeiti
|
||||
GenericName[lt]=Išeiti
|
||||
Comment[lt]=Išėjimo dialogas
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[eu]=Blokeatu pantaila
|
||||
GenericName[eu]=Blokeatu pantaila
|
||||
Comment[eu]=Blokeatu uneko saioa
|
@ -0,0 +1,3 @@
|
||||
Name[lt]=Užrakinti ekraną
|
||||
GenericName[lt]=Užrakinti ekraną
|
||||
Comment[lt]=Užrakinti esamą seansą
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[eu]=Itxi saioa
|
||||
GenericName[eu]=Itxi saioa
|
||||
Comment[eu]=Itxi uneko saioa
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[lt]=Atsijungti
|
||||
GenericName[lt]=Atsijungti
|
||||
Comment[lt]=Atsijungti iš esamo seanso
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[eu]=Berrabiarazi
|
||||
GenericName[eu]=Berrabiarazi
|
||||
Comment[eu]=Berrabiarazi ordenagailua
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[lt]=Paleisti iš naujo
|
||||
GenericName[lt]=Paleisti iš naujo
|
||||
Comment[lt]=Paleisti kompiuterį iš naujo
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[eu]=Itzali
|
||||
GenericName[eu]=Itzali
|
||||
Comment[eu]=Itzali ordenagailua
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[lt]=Išjungti
|
||||
GenericName[lt]=Išjungti
|
||||
Comment[lt]=Išjungti kompiuterį
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[eu]=Eseki
|
||||
GenericName[eu]=Eseki
|
||||
Comment[eu]=Eseki ordenagailua
|
@ -0,0 +1,4 @@
|
||||
#Translation
|
||||
Name[lt]=Pristabdyti
|
||||
GenericName[lt]=Pristabdyti
|
||||
Comment[lt]=Pristabdyti kompiuterį
|
@ -0,0 +1,48 @@
|
||||
.TH STARTLXQT 1 2015-11-03 "LXQt 0.10.0" "LXQt session management"
|
||||
.SH NAME
|
||||
startlxqt \- script to initialize and launch LXQt sessions
|
||||
.SH SYNOPSIS
|
||||
.B startlxqt
|
||||
.SH DESCRIPTION
|
||||
\fBstartlxqt\fR is a shell script meant to initialize and launch LXQt sessions.
|
||||
It is as such similar to counterparts of other desktop environments like startlxde in
|
||||
LXDE or startkde in KDE.
|
||||
.P
|
||||
It's main tasks are exporting environment variables, partly after performing
|
||||
corresponding checks, and launching \fBlxqt-session\fR, the LXQt session manager.
|
||||
.P
|
||||
It is not meant to be run by users.
|
||||
Rather, it is invoked as backend, e. g. by script \fBstartx\fR on virtual terminals or display
|
||||
managers like SDDM or LightDM, see section \fIEXAMPLE\fR.
|
||||
.SH FILES
|
||||
.I $XDG_DATA_DIRS/xsessions/lxqt.desktop
|
||||
.RS 5
|
||||
Desktop entry file stating startlxqt as binary needed to start LXQt sessions. Sourced e. g.
|
||||
by display managers.
|
||||
.RE
|
||||
.SH BUGS
|
||||
None at the time of this writing. Bugs can be reported on https://github.com/lxde/lxqt/issues.
|
||||
.SH EXAMPLE
|
||||
To start an LXQt session from a virtual terminal (virtual console) add a line
|
||||
.P
|
||||
.RS 5
|
||||
exec startlxqt
|
||||
.RE
|
||||
.P
|
||||
to file \fI~/.xinitrc\fR. An LXQt session will then be launched by running \fBstartx\fR.
|
||||
.P
|
||||
Display managers are making use of scripts like \fBstartlxqt\fR automatically. Information about
|
||||
available desktop environments is provided by files \fI$XDG_DATA_DIRS/xsessions/*.desktop\fR, typically
|
||||
\fI/usr/share/xessions/*.desktop\fR.
|
||||
.br
|
||||
File \fIlxqt.desktop\fR provided by LXQt is stating \fBstartlxqt\fR in key \fIExec\fR while making sure the session
|
||||
manager \fBlxqt-session\fR does exist by stating it in key \fITryExec\fR.
|
||||
.SH SEE ALSO
|
||||
.BR lxqt-session (1)
|
||||
.BR startx (1)
|
||||
.BR sddm (1)
|
||||
.P
|
||||
.B http://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/
|
||||
.RS 5
|
||||
Desktop Entry Specification defining desktop entry files (*.desktop).
|
||||
.RE
|
@ -0,0 +1,99 @@
|
||||
#!/bin/sh
|
||||
|
||||
contains()
|
||||
{
|
||||
local str="$1" substr="$2"
|
||||
[ "$str" = "$substr" -o -z "${str##$substr:*}" -o -z "${str##*:$substr:*}" -o -z "${str%%*:$substr}" ]
|
||||
}
|
||||
|
||||
if [ -z "$XDG_DATA_HOME" ]; then
|
||||
export XDG_DATA_HOME="$HOME/.local/share"
|
||||
fi
|
||||
|
||||
if [ -z "$XDG_CONFIG_HOME" ]; then
|
||||
export XDG_CONFIG_HOME="$HOME/.config"
|
||||
fi
|
||||
|
||||
if [ -z "$XDG_DATA_DIRS" ]; then
|
||||
XDG_DATA_DIRS="@PREDEF_XDG_DATA_DIRS@"
|
||||
else
|
||||
if ! contains "$XDG_DATA_DIRS" "@LXQT_DATA_DIR@"; then
|
||||
XDG_DATA_DIRS="$XDG_DATA_DIRS:@LXQT_DATA_DIR@"
|
||||
fi
|
||||
fi
|
||||
export XDG_DATA_DIRS
|
||||
|
||||
if [ -z "$XDG_CONFIG_DIRS" ]; then
|
||||
export XDG_CONFIG_DIRS="@LXQT_ETC_XDG_DIR@"
|
||||
else
|
||||
if ! contains "$XDG_CONFIG_DIRS" '@LXQT_ETC_XDG_DIR@'; then
|
||||
XDG_CONFIG_DIRS="$XDG_CONFIG_DIRS:@LXQT_ETC_XDG_DIR@"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$XDG_CACHE_HOME" ]; then
|
||||
export XDG_CACHE_HOME="$HOME/.cache"
|
||||
fi
|
||||
|
||||
# Ensure the existance of the 'Desktop' folder
|
||||
if [ -e "$XDG_CONFIG_HOME/user-dirs.dirs" ]; then
|
||||
. "$XDG_CONFIG_HOME/user-dirs.dirs"
|
||||
else
|
||||
XDG_DESKTOP_DIR="$HOME/Desktop"
|
||||
fi
|
||||
mkdir -p "$XDG_DESKTOP_DIR"
|
||||
|
||||
# Clean up after GDM (GDM sets the number of desktops to one)
|
||||
xprop -root -remove _NET_NUMBER_OF_DESKTOPS -remove _NET_DESKTOP_NAMES -remove _NET_CURRENT_DESKTOP 2> /dev/null
|
||||
|
||||
# Enable Qt integration for OpenOffice.org, if available.
|
||||
if [ -z "$SAL_USE_VCLPLUGIN" ]; then
|
||||
export SAL_USE_VCLPLUGIN=kde4
|
||||
fi
|
||||
|
||||
# Launch DBus if needed
|
||||
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
|
||||
if [ -z "$XDG_RUNTIME_DIR" ] || ! [ -S "$XDG_RUNTIME_DIR/bus" ] || ! [ -O "$XDG_RUNTIME_DIR/bus" ]; then
|
||||
eval "$(dbus-launch --sh-syntax --exit-with-session)" || echo "startlxqt: error executing dbus-launch" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
# Copy default settings of openbox
|
||||
if [ ! -e "$XDG_CONFIG_HOME/openbox/lxqt-rc.xml" ] ; then
|
||||
ob_config_copied=0
|
||||
for considered_file in 'lxde-rc.xml' 'rc.xml'; do
|
||||
if [ -e "$XDG_CONFIG_HOME/openbox/$considered_file" ]; then
|
||||
#copy existing configuration of openbox
|
||||
cp "$XDG_CONFIG_HOME/openbox/$considered_file" "$XDG_CONFIG_HOME/openbox/lxqt-rc.xml"
|
||||
message="Your existing configuration for openbox '$XDG_CONFIG_HOME/openbox/$considered_file' was used to
|
||||
fill the LXQt's openbox configuration '$XDG_CONFIG_HOME/openbox/lxqt-rc.xml'.
|
||||
If you want to use the predefined LXQt's openbox configuration, run:
|
||||
cp '@LXQT_ETC_XDG_DIR@/openbox/lxqt-rc.xml' '$XDG_CONFIG_HOME/openbox'"
|
||||
echo "$message" >&2
|
||||
xmessage -center -title "LXQt Openbox configuration" "$message" &
|
||||
ob_config_copied=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ 0 -eq "$ob_config_copied" ]; then
|
||||
#copy predefined configuration
|
||||
mkdir -p "$XDG_CONFIG_HOME/openbox"
|
||||
#user/distribution can change the default configuration via LXQT_DEFAULT_OPENBOX_CONFIG
|
||||
[ -r "$LXQT_DEFAULT_OPENBOX_CONFIG" ] || LXQT_DEFAULT_OPENBOX_CONFIG='@LXQT_ETC_XDG_DIR@/openbox/lxqt-rc.xml'
|
||||
cp "$LXQT_DEFAULT_OPENBOX_CONFIG" "$XDG_CONFIG_HOME/openbox"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Qt4 platform plugin
|
||||
export QT_PLATFORM_PLUGIN=lxqt
|
||||
|
||||
# Qt5 platform plugin
|
||||
export QT_QPA_PLATFORMTHEME=lxqt
|
||||
|
||||
# use lxqt-applications.menu for main app menu
|
||||
export XDG_MENU_PREFIX="lxqt-"
|
||||
|
||||
export XDG_CURRENT_DESKTOP="LXQt"
|
||||
|
||||
# Start the LXQt session
|
||||
exec lxqt-session
|
@ -0,0 +1,29 @@
|
||||
# TODO/FIXME: install kdm/gdm files too
|
||||
# this file should be enough but it needs testing...
|
||||
file(GLOB SESSION_FILES_IN *.desktop.in)
|
||||
|
||||
# Translations **********************************
|
||||
lxqt_translate_desktop(SESSION_FILES
|
||||
SOURCES
|
||||
${SESSION_FILES_IN}
|
||||
)
|
||||
add_custom_target(xsession_desktop_files ALL DEPENDS ${SESSION_FILES})
|
||||
#************************************************
|
||||
|
||||
MACRO(INSTALL_SESSION_FILES directory)
|
||||
# if(EXISTS ${directory})
|
||||
install(FILES
|
||||
${SESSION_FILES}
|
||||
DESTINATION "${directory}"
|
||||
COMPONENT Runtime
|
||||
)
|
||||
# endif()
|
||||
ENDMACRO(INSTALL_SESSION_FILES)
|
||||
|
||||
#INSTALL_SESSION_FILES("/etc/X11/sessions")
|
||||
#INSTALL_SESSION_FILES("/usr/share/sessions")
|
||||
INSTALL_SESSION_FILES("${CMAKE_INSTALL_DATAROOTDIR}/xsessions")
|
||||
INSTALL_SESSION_FILES("${CMAKE_INSTALL_DATAROOTDIR}/kdm/sessions")
|
||||
#INSTALL_SESSION_FILES("/usr/local/share/apps/kdm/sessions")
|
||||
#INSTALL_SESSION_FILES("/usr/share/config/kdm/sessions")
|
||||
#INSTALL_SESSION_FILES("/usr/local/share/config/kdm/sessions")
|
@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=startlxqt
|
||||
TryExec=lxqt-session
|
||||
Name=LXQt Desktop
|
||||
Comment=Lightweight Qt Desktop
|
||||
|
||||
#TRANSLATIONS_DIR=translations
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[ar]=سطح المكتب ريزر
|
||||
Comment[ar]=سطح المكتب كيوت٤
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[cs]=Plocha LXQt
|
||||
Comment[cs]=Pracovní plocha na Qt
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[cs_CZ]=Pracovní plocha LXQt
|
||||
Comment[cs_CZ]=Pracovní plocha Qt
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[da]=LXQt-skrivebord
|
||||
Comment[da]=Letvægts Qt-skrivebord
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[de]=LXQt Arbeitsumgebung
|
||||
Comment[de]=Leichtgewichtige Qt Arbeitsumgebung
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[el]=Επιφάνεια εργασίας LXQt
|
||||
Comment[el]=Ελαφριά επιφάνεια εργασίας Qt
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[eo]=LXQta labortablo
|
||||
Comment[eo]=Qt-labortablo
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[es]=Escritorio LXQt
|
||||
Comment[es]=Escritorio Qt
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[es_VE]=Escritorio LXQt
|
||||
Comment[es_VE]=Escritorio Qt
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[eu]=LXQt mahaigaina
|
||||
Comment[eu]=Qt mahaigaina
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[fi]=LXQt-työpöytä
|
||||
Comment[fi]=Qt-työpöytä
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[fr]=Bureau LXQt
|
||||
Comment[fr]=Bureau léger pour Qt
|
@ -0,0 +1,3 @@
|
||||
# Translations
|
||||
Name[hu]=LXQt asztal
|
||||
Comment[hu]=Qt asztali környezet
|
@ -0,0 +1 @@
|
||||
# Translations
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue