Adding upstream version 0.10.0.

upstream/0.10.0
Alf Gaida 9 years ago
parent afb7f24ec7
commit 540ad34d97

1
.gitignore vendored

@ -0,0 +1 @@
build

@ -7,7 +7,7 @@ Copyright:
Copyright (c) 2012-2014 LXQt team Copyright (c) 2012-2014 LXQt team
License: GPL-2 and LGPL-2.1+ License: GPL-2 and LGPL-2.1+
The full text of the licenses can be found in the 'COPYING' file. The full text of the licenses can be found in the 'LICENSE' file.
The lxqt-config-cursor component is based on the "qt-xcurtheme" project The lxqt-config-cursor component is based on the "qt-xcurtheme" project
and is licensed under GPL 2, GPL 3, LGPL-2, LGPL-2.1 and WTFPL 2. and is licensed under GPL 2, GPL 3, LGPL-2, LGPL-2.1 and WTFPL 2.

@ -1,9 +1,8 @@
GNU LESSER GENERAL PUBLIC LICENSE GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999 Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc. Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
@ -23,8 +22,7 @@ specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations strategy to use in any particular case, based on the explanations below.
below.
When we speak of free software, we are referring to freedom of use, When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that not price. Our General Public Licenses are designed to make sure that
@ -89,9 +87,9 @@ libraries. However, the Lesser license provides advantages in certain
special circumstances. special circumstances.
For example, on rare occasions, there may be a special need to For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it encourage the widest possible use of a certain library, so that it becomes
becomes a de-facto standard. To achieve this, non-free programs must a de-facto standard. To achieve this, non-free programs must be
be allowed to use the library. A more frequent case is that a free allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License. software only, so we use the Lesser General Public License.
@ -138,8 +136,8 @@ included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for "Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control interface definition files, plus the scripts used to control compilation
compilation and installation of the library. and installation of the library.
Activities other than copying, distribution and modification are not Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of covered by this License; they are outside its scope. The act of
@ -305,10 +303,10 @@ of these things:
the user installs one, as long as the modified version is the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with. interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at least c) Accompany the work with a written offer, valid for at
three years, to give the same user the materials specified in least three years, to give the same user the materials
Subsection 6a, above, for a charge no more than the cost of specified in Subsection 6a, above, for a charge no more
performing this distribution. than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above from a designated place, offer equivalent access to copy the above
@ -386,10 +384,9 @@ all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library. refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under If any portion of this section is held invalid or unenforceable under any
any particular circumstance, the balance of the section is intended to particular circumstance, the balance of the section is intended to apply,
apply, and the section as a whole is intended to apply in other and the section as a whole is intended to apply in other circumstances.
circumstances.
It is not the purpose of this section to induce you to infringe any It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any patents or other property right claims or to contest validity of any
@ -407,11 +404,11 @@ be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in 12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License original copyright holder who places the Library under this License may add
may add an explicit geographical distribution limitation excluding those an explicit geographical distribution limitation excluding those countries,
countries, so that distribution is permitted only in or among so that distribution is permitted only in or among countries not thus
countries not thus excluded. In such case, this License incorporates excluded. In such case, this License incorporates the limitation as if
the limitation as if written in the body of this License. written in the body of this License.
13. The Free Software Foundation may publish revised and/or new 13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time. versions of the Lesser General Public License from time to time.

@ -20,7 +20,7 @@
</message> </message>
<message> <message>
<source>&amp;Set Theme</source> <source>&amp;Set Theme</source>
<translation>Ε&amp;πιλογή θέματος</translation> <translation type="vanished">Ε&amp;πιλογή θέματος</translation>
</message> </message>
<message> <message>
<location filename="../selectwnd.ui" line="88"/> <location filename="../selectwnd.ui" line="88"/>
@ -29,7 +29,7 @@
</message> </message>
<message> <message>
<source>&amp;Close</source> <source>&amp;Close</source>
<translation>&amp;Κλείσιμο</translation> <translation type="vanished">&amp;Κλείσιμο</translation>
</message> </message>
<message> <message>
<location filename="../selectwnd.cpp" line="208"/> <location filename="../selectwnd.cpp" line="208"/>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>نماذج ايقونات</translation> <translation>نماذج ايقونات</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">واجهة ريزر المخصَّصة</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">واجهة ريزر المخصَّصة</translation> <translation>واجهة ريزر المخصَّصة</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>تهيئة مظهر ريزر</translation> <translation>تهيئة مظهر ريزر</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>نماذج ايقونات</translation> <translation>نماذج ايقونات</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>واجهة ريزر المخصَّصة</translation> <translation>واجهة ريزر المخصَّصة</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Téma ikon</translation> <translation>Téma ikon</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Motiv LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Motiv LXQt</translation> <translation>Motiv LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Nastavení vzhledu</translation> <translation>Nastavení vzhledu</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Téma ikon</translation> <translation>Téma ikon</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Motiv LXQt</translation> <translation>Motiv LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Téma ikon</translation> <translation>Téma ikon</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Motiv LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Motiv LXQt</translation> <translation>Motiv LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Nastavení vzhledu</translation> <translation>Nastavení vzhledu</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Téma ikon</translation> <translation>Téma ikon</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Motiv LXQt</translation> <translation>Motiv LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Ikontema</translation> <translation>Ikontema</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt Tema</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt Tema</translation> <translation>LXQt Tema</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt Indstillinger for Udseende</translation> <translation>LXQt Indstillinger for Udseende</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Ikontema</translation> <translation>Ikontema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt Tema</translation> <translation>LXQt Tema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Ikontema</translation> <translation>Ikontema</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt Tema</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt Tema</translation> <translation>LXQt Tema</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt Indstillinger for Udseende</translation> <translation>LXQt Indstillinger for Udseende</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Ikontema</translation> <translation>Ikontema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt Tema</translation> <translation>LXQt Tema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt Erscheinungsbild-Konfiguration</translation> <translation>LXQt Erscheinungsbild-Konfiguration</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Stil der Bedienelemente</translation> <translation>Stil der Bedienelemente</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Symboldesign</translation> <translation>Symboldesign</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt-Design</translation> <translation>LXQt-Design</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Schriftart</translation> <translation>Schriftart</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Mauszeiger</translation> <translation>Mauszeiger</translation>
</message> </message>

@ -138,13 +138,6 @@
<translation>Θέμα εικονιδίων</translation> <translation>Θέμα εικονιδίων</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation>Θέμα του LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
@ -156,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Διαμόρφωση της εμφάνισης του LXQt</translation> <translation>Διαμόρφωση της εμφάνισης του LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Στιλ συστατικού</translation> <translation>Στιλ συστατικού</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Θέμα εικονιδίων</translation> <translation>Θέμα εικονιδίων</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Θέμα LXQt</translation> <translation>Θέμα LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Γραμματοσειρά</translation> <translation>Γραμματοσειρά</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Δρομέας</translation> <translation>Δρομέας</translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Etoso de piktogramoj</translation> <translation>Etoso de piktogramoj</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Etoso de LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Etoso de LXQt</translation> <translation>Etoso de LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Agordoj de apero de LXQto</translation> <translation>Agordoj de apero de LXQto</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Etoso de piktogramoj</translation> <translation>Etoso de piktogramoj</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Etoso de LXQt</translation> <translation>Etoso de LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Tema de iconos</translation> <translation>Tema de iconos</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Tema de LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Tema de LXQt</translation> <translation>Tema de LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Configuración de apariencia de LXQt</translation> <translation>Configuración de apariencia de LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema de iconos</translation> <translation>Tema de iconos</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Tema de LXQt</translation> <translation>Tema de LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Tema de iconos</translation> <translation>Tema de iconos</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Tema LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Tema LXQt</translation> <translation>Tema LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Configuración de apariencia de LXQt</translation> <translation>Configuración de apariencia de LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema de iconos</translation> <translation>Tema de iconos</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Tema LXQt</translation> <translation>Tema LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Ikonoen gaia</translation> <translation>Ikonoen gaia</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt gaia</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt gaia</translation> <translation>LXQt gaia</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt itxuraren konfigurazioa</translation> <translation>LXQt itxuraren konfigurazioa</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Ikonoen gaia</translation> <translation>Ikonoen gaia</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt gaia</translation> <translation>LXQt gaia</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Kuvaketeema</translation> <translation>Kuvaketeema</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt-teema</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt-teema</translation> <translation>LXQt-teema</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQtin ulkoasun hallinta</translation> <translation>LXQtin ulkoasun hallinta</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Kuvaketeema</translation> <translation>Kuvaketeema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt-teema</translation> <translation>LXQt-teema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Thème d&apos;icones</translation> <translation>Thème d&apos;icones</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Thème de LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Thème de LXQt</translation> <translation>Thème de LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Configuration de l&apos;apparence de LXQt</translation> <translation>Configuration de l&apos;apparence de LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Thème d&apos;icones</translation> <translation>Thème d&apos;icones</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Thème de LXQt</translation> <translation>Thème de LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,13 +138,6 @@
<translation>Ikontéma</translation> <translation>Ikontéma</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt téma</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
@ -156,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt megjelenésbeállító</translation> <translation>LXQt megjelenésbeállító</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Bigyótéma</translation> <translation>Bigyótéma</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Ikontéma</translation> <translation>Ikontéma</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt téma</translation> <translation>LXQt téma</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Betű</translation> <translation>Betű</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Kurzor</translation> <translation>Kurzor</translation>
</message> </message>

@ -160,32 +160,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt megjelenésbeállító</translation> <translation>LXQt megjelenésbeállító</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Bigyótéma</translation> <translation>Bigyótéma</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Ikontémák</translation> <translation>Ikontémák</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQT téma</translation> <translation>LXQT téma</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Betű</translation> <translation>Betű</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Kurzor</translation> <translation>Kurzor</translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Konfigurasi Penampilan LXQt</translation> <translation>Konfigurasi Penampilan LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema Ikon</translation> <translation>Tema Ikon</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -150,32 +150,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Centro di Configurazione LXQt</translation> <translation>Centro di Configurazione LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Stile degli elementi</translation> <translation>Stile degli elementi</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema delle icone</translation> <translation>Tema delle icone</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Tema di LXQt</translation> <translation>Tema di LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Caratteri</translation> <translation>Caratteri</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Cursore</translation> <translation>Cursore</translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt</translation> <translation>LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt</translation> <translation>LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation></translation> <translation></translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Piktogramų tema</translation> <translation>Piktogramų tema</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt apipavidalinimas</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt apipavidalinimas</translation> <translation>LXQt apipavidalinimas</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt išvaizdos nustatymai</translation> <translation>LXQt išvaizdos nustatymai</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Piktogramų tema</translation> <translation>Piktogramų tema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt apipavidalinimas</translation> <translation>LXQt apipavidalinimas</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Pictogram Thema</translation> <translation>Pictogram Thema</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt Thema</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt Thema</translation> <translation>LXQt Thema</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt Uiterlijk Configuratie</translation> <translation>LXQt Uiterlijk Configuratie</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Pictogram Thema</translation> <translation>Pictogram Thema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt Thema</translation> <translation>LXQt Thema</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Menu</translation> <translation>Menu</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,13 +138,6 @@
<translation>Motyw ikon</translation> <translation>Motyw ikon</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Motyw LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
@ -156,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Konfiguracja wyglądu LXQt</translation> <translation>Konfiguracja wyglądu LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Widżety</translation> <translation>Widżety</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Motyw ikon</translation> <translation>Motyw ikon</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Motyw LXQt</translation> <translation>Motyw LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Czcionka</translation> <translation>Czcionka</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Kursor</translation> <translation>Kursor</translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Tema de ícones</translation> <translation>Tema de ícones</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Tema LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Tema LXQt</translation> <translation>Tema LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Configuração da aparência do LXQt</translation> <translation>Configuração da aparência do LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema de ícones</translation> <translation>Tema de ícones</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Tema LXQt</translation> <translation>Tema LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Tema de ícones</translation> <translation>Tema de ícones</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Tema do LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Tema do LXQt</translation> <translation>Tema do LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Configuração da aparência do LXQt</translation> <translation>Configuração da aparência do LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema de ícones</translation> <translation>Tema de ícones</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Tema do LXQt</translation> <translation>Tema do LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Temă pictograme</translation> <translation>Temă pictograme</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Temă LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Temă LXQt</translation> <translation>Temă LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Părăsește</translation> <translation>Părăsește</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Temă pictograme</translation> <translation>Temă pictograme</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Temă LXQt</translation> <translation>Temă LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Настройка внешнего вида LXQt</translation> <translation>Настройка внешнего вида LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Тема иконок</translation> <translation>Тема иконок</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt темы</translation> <translation>LXQt темы</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Стиль виджетов</translation> <translation>Стиль виджетов</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Шрифт</translation> <translation>Шрифт</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Курсор</translation> <translation>Курсор</translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Настройка внешнего вида LXQt</translation> <translation>Настройка внешнего вида LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Тема иконок</translation> <translation>Тема иконок</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt темы</translation> <translation>LXQt темы</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation>Стиль виджетов</translation> <translation>Стиль виджетов</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation>Шрифт</translation> <translation>Шрифт</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation>Курсор</translation> <translation>Курсор</translation>
</message> </message>

@ -160,32 +160,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation type="unfinished">Nastavenie vzhľadu prostredia LXQt</translation> <translation type="unfinished">Nastavenie vzhľadu prostredia LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished">Téma ikon</translation> <translation type="unfinished">Téma ikon</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Tema ikon</translation> <translation>Tema ikon</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Tema za LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Tema za LXQt</translation> <translation>Tema za LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Nastavitev videza za LXQt</translation> <translation>Nastavitev videza za LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Tema ikon</translation> <translation>Tema ikon</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Tema za LXQt</translation> <translation>Tema za LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -149,32 +149,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Automatsko suspendovanje</translation> <translation>Automatsko suspendovanje</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -160,32 +160,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation type="unfinished">Подешавање изгледа Рејзора</translation> <translation type="unfinished">Подешавање изгледа Рејзора</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished">Тема икона</translation> <translation type="unfinished">Тема икона</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -160,32 +160,32 @@
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation type="unfinished">Подешавање изгледа Рејзора</translation> <translation type="unfinished">Подешавање изгледа Рејзора</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation type="unfinished">Тема икона</translation> <translation type="unfinished">Тема икона</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished"> LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished"> LXQt</translation> <translation> LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation> LXQt </translation> <translation> LXQt </translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation> LXQt</translation> <translation> LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Simge Teması</translation> <translation>Simge Teması</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt Teması</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt Teması</translation> <translation>LXQt Teması</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt Görünüm Ayarları</translation> <translation>LXQt Görünüm Ayarları</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Simge Teması</translation> <translation>Simge Teması</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt Teması</translation> <translation>LXQt Teması</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation>Тема значків</translation> <translation>Тема значків</translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">Тема LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">Тема LXQt</translation> <translation>Тема LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>Налаштування вигляду LXQt</translation> <translation>Налаштування вигляду LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation>Тема значків</translation> <translation>Тема значків</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>Тема LXQt</translation> <translation>Тема LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt </translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt </translation> <translation>LXQt </translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt </translation> <translation>LXQt </translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt </translation> <translation>LXQt </translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -138,50 +138,43 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>LXQtThemeConfig</name>
<message>
<source>LXQt Theme</source>
<translation type="vanished">LXQt</translation>
</message>
</context>
<context> <context>
<name>LXQtThemeConfig</name> <name>LXQtThemeConfig</name>
<message> <message>
<location filename="../lxqtthemeconfig.ui" line="23"/> <location filename="../lxqtthemeconfig.ui" line="23"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation type="unfinished">LXQt</translation> <translation>LXQt</translation>
</message> </message>
</context> </context>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="45"/> <location filename="../main.cpp" line="46"/>
<source>LXQt Appearance Configuration</source> <source>LXQt Appearance Configuration</source>
<translation>LXQt</translation> <translation>LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="51"/> <location filename="../main.cpp" line="52"/>
<source>Widget Style</source> <source>Widget Style</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="55"/> <location filename="../main.cpp" line="56"/>
<source>Icons Theme</source> <source>Icons Theme</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="59"/> <location filename="../main.cpp" line="60"/>
<source>LXQt Theme</source> <source>LXQt Theme</source>
<translation>LXQt</translation> <translation>LXQt</translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="63"/> <location filename="../main.cpp" line="64"/>
<source>Font</source> <source>Font</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="68"/> <location filename="../main.cpp" line="69"/>
<source>Cursor</source> <source>Cursor</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation>0</translation> <translation>0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation>0</translation> <translation>0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation>0</translation> <translation>0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation>0</translation> <translation>0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation>0</translation> <translation>0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -66,6 +66,11 @@
<source>0</source> <source>0</source>
<translation type="unfinished">0</translation> <translation type="unfinished">0</translation>
</message> </message>
<message>
<location filename="../keyboardconfig.ui" line="167"/>
<source>Turn on NumLock after login</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>KeyboardLayoutConfig</name> <name>KeyboardLayoutConfig</name>

@ -33,8 +33,8 @@
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
LXQt::SingleApplication app(argc, argv); LXQt::SingleApplication app(argc, argv);
LXQt::Settings settings("LXQt-config-locale"); LXQt::Settings settings("lxqt-config-locale");
LXQt::Settings session_settings("LXQt-session"); LXQt::Settings session_settings("session");
LXQt::ConfigDialog* dialog = new LXQt::ConfigDialog(QObject::tr("LXQt Locale Configuration"), &settings); LXQt::ConfigDialog* dialog = new LXQt::ConfigDialog(QObject::tr("LXQt Locale Configuration"), &settings);
app.setActivationWindow(dialog); app.setActivationWindow(dialog);

@ -64,32 +64,32 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../localeconfig.cpp" line="118"/> <location filename="../localeconfig.cpp" line="119"/>
<source>No change</source> <source>No change</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../localeconfig.cpp" line="306"/> <location filename="../localeconfig.cpp" line="308"/>
<source>Format Settings Changed</source> <source>Format Settings Changed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../localeconfig.cpp" line="307"/> <location filename="../localeconfig.cpp" line="309"/>
<source>Save the settings ? (they will take effect the next time you log in)</source> <source>Save the settings ? (they will take effect the next time you log in)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../localeconfig.cpp" line="428"/> <location filename="../localeconfig.cpp" line="430"/>
<source>Imperial UK</source> <source>Imperial UK</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../localeconfig.cpp" line="432"/> <location filename="../localeconfig.cpp" line="434"/>
<source>Imperial US</source> <source>Imperial US</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../localeconfig.cpp" line="436"/> <location filename="../localeconfig.cpp" line="438"/>
<source>Metric</source> <source>Metric</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -1,73 +1,65 @@
project(lxqt-config-monitor) project(lxqt-config-monitor)
find_package(KF5Screen REQUIRED)
find_package(Qt5Svg REQUIRED) find_package(Qt5Svg REQUIRED)
set(H_FILES set(HEADERS
main.h
monitorsettingsdialog.h monitorsettingsdialog.h
monitor.h monitor.h
monitorwidget.h monitorwidget.h
xrandr.h
monitorpicture.h monitorpicture.h
quickoptions.h loadsettings.h
savesettings.h settingsdialog.h
) )
set(CPP_FILES set(SOURCES
main.cpp main.cpp
monitorsettingsdialog.cpp monitorsettingsdialog.cpp
xrandr.cpp
monitor.cpp monitor.cpp
monitorwidget.cpp monitorwidget.cpp
timeoutdialog.cpp timeoutdialog.cpp
monitorpicture.cpp monitorpicture.cpp
quickoptions.cpp loadsettings.cpp
savesettings.cpp settingsdialog.cpp
) )
set(UI_FILES set(UIS
mainwindow.ui monitorsettingsdialog.ui
monitorwidget.ui monitorwidget.ui
timeoutdialog.ui timeoutdialog.ui
monitorpicture.ui monitorpicture.ui
quickoptions.ui
savesettings.ui
) )
set(ICON_FILES set(ICONS
icons/monitor.svg icons/monitor.svg
icons/extended.svg
icons/monitor1onmonitor2ff.svg
icons/unified.svg
icons/monitor1offmonitor2on.svg
) )
# Config file # Config file
configure_file ( configure.in configure.h ) configure_file(resources/configure.in configure.h)
# Translations ********************************** # Translations **********************************
lxqt_translate_ts(QM_FILES lxqt_translate_ts(QM_FILES
UPDATE_TRANSLATIONS UPDATE_TRANSLATIONS
${UPDATE_TRANSLATIONS} ${UPDATE_TRANSLATIONS}
SOURCES SOURCES
${H_FILES} ${HEADERS}
${CPP_FILES} ${SOURCES}
${UI_FILES} ${UIS}
INSTALL_DIR INSTALL_DIR
"${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}" "${LXQT_TRANSLATIONS_DIR}/${PROJECT_NAME}"
) )
lxqt_app_translation_loader(QM_LOADER ${PROJECT_NAME}) lxqt_app_translation_loader(QM_LOADER ${PROJECT_NAME})
lxqt_translate_desktop(DESKTOP_FILES SOURCES ${PROJECT_NAME}.desktop.in) lxqt_translate_desktop(DESKTOP_FILES SOURCES "resources/${PROJECT_NAME}.desktop.in")
#************************************************ #************************************************
add_executable(${PROJECT_NAME} add_executable(${PROJECT_NAME}
${CPP_FILES} ${SOURCES}
${RESOURCES} ${RESOURCES}
${QRC_SOURCES} ${QRC_SOURCES}
${QM_FILES}
${DESKTOP_FILES} ${DESKTOP_FILES}
${QM_FILES}
${QM_LOADER} ${QM_LOADER}
) )
@ -75,21 +67,10 @@ target_link_libraries(${PROJECT_NAME}
Qt5::Widgets Qt5::Widgets
Qt5::X11Extras Qt5::X11Extras
Qt5::Svg Qt5::Svg
KF5::Screen
lxqt lxqt
) )
install(TARGETS install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR})
${PROJECT_NAME} install(FILES ${DESKTOP_FILES} DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/applications")
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" install(FILES ${ICON_FILES} DESTINATION "${CMAKE_INSTALL_FULL_DATADIR}/lxqt/icons")
COMPONENT Runtime
)
install(FILES
${DESKTOP_FILES}
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
COMPONENT Runtime
)
install(FILES
${ICON_FILES}
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/lxqt/icons"
COMPONENT Runtime
)

@ -1,4 +1,4 @@
lxqt-config-monitor lxqt-config-monitor
=================== ===================
This tool lets you change monitor settings. It is based on lxrandr-qt. This tool lets you change monitor settings. It was based on lxrandr-qt but now uses libkscreen.

@ -1,557 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- Made by Dmitry Chestnykh (http://www.codingrobots.com) on Feb 25, 2009 -->
<!-- Public Domain: feel free to do everything you want with this drawing -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:docname="extended.svg"
viewBox="0 0 1400 398.84"
version="1.0"
inkscape:version="0.91 r13725"
width="1400"
height="398.84">
<sodipodi:namedview
id="namedview59"
bordercolor="#666666"
inkscape:pageshadow="2"
guidetolerance="10"
pagecolor="#ffffff"
gridtolerance="10"
inkscape:window-maximized="0"
inkscape:zoom="0.3284502"
objecttolerance="10"
borderopacity="1"
inkscape:current-layer="layer1"
inkscape:cx="505.40679"
inkscape:cy="106.39877"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-width="1160"
showgrid="false"
inkscape:pageopacity="0"
inkscape:window-height="720" />
<defs
id="defs4">
<linearGradient
id="linearGradient3291">
<stop
id="stop3293"
style="stop-color:#676767"
offset="0" />
<stop
id="stop3299"
style="stop-color:#ffffff"
offset=".02" />
<stop
id="stop3297"
style="stop-color:#dfdfe1"
offset=".04" />
<stop
id="stop3303"
style="stop-color:#efeff0"
offset="0.96" />
<stop
id="stop3301"
style="stop-color:#ffffff"
offset="0.98" />
<stop
id="stop3295"
style="stop-color:#676767"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3231">
<stop
id="stop3233"
style="stop-color:#ffffff"
offset="0" />
<stop
id="stop3235"
style="stop-color:#000000;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3237"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,-9.9652,2.1515)"
y1="97.767998"
x1="525.28003" />
<radialGradient
id="radialGradient3257"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1,0,0,0.95,0,5.0362)"
r="3.4688001" />
<linearGradient
id="linearGradient3289"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,-1.0442,36.361)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3321"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,0,0.72801)"
y1="267.47"
x1="130.31">
<stop
id="stop3315"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,1.2423,-21.78)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3415"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,-0.03056,51.617)"
y1="459.79999"
x1="18.142" />
<linearGradient
id="linearGradient3447"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,-3.098,-2.7751)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,-6.2255,-2.7751)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,-3.098,19.287)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,-4.9081,-7.6835)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339-2"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,697.91983,-23.304213)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335-0"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337-1"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471-1"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,691.76943,-9.2077128)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475-6"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477-8"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3289-9"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,695.63333,34.836787)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3415-2"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,696.64703,50.092787)"
y1="459.79999"
x1="18.142" />
<radialGradient
id="radialGradient3257-3"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1.2563,0,0,1.193485,602.11753,-21.152233)"
r="3.4688001" />
<linearGradient
id="linearGradient3237-0"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,686.71233,0.62728715)"
y1="97.767998"
x1="525.28003" />
<linearGradient
id="linearGradient3321-4"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,696.67753,-0.79620285)"
y1="267.47"
x1="130.31">
<stop
id="stop3315-8"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317-9"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3447-1"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,693.57953,-4.2993128)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391-4"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393-4"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466-6"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,693.57953,17.762787)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356-4"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483-4"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358-6"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453-6"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,690.45203,-4.2993128)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372-5"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374-6"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
</defs>
<g
id="layer1"
transform="translate(-18.142,-83.649)">
<path
id="rect3343"
style="fill:url(#linearGradient3453)"
d="m 50.343,458.94 642.03,0 c 10.97,0 19.8,4.6 19.8,10.31 l 2.11,5.71 c -7.73,4.32 -10.94,7.53 -21.91,7.53 l -642.03,0 c -10.968,0 -22.769,-7.05 -25.49,-11.28 l 7.667,-1.23 c 0,-5.7 6.855,-11.04 17.826,-11.04 z"
inkscape:connector-curvature="0" />
<path
id="rect3341"
style="fill:url(#linearGradient3466)"
d="m 35.312,447.96 c -7.029,0 -13.166,2.66 -16.656,6.67 l 0,13.87 c 0,0.49 -0.03,0.97 -0.062,1.46 3.479,4.05 9.647,6.76 16.718,6.76 l 672.1,0 c 7.65,0 14.22,-3.18 17.5,-7.81 -0.22,-1.12 -0.35,-2.27 -0.35,-3.45 l 0,-10.23 c -3.38,-4.35 -9.78,-7.27 -17.15,-7.27 l -672.1,0 z"
inkscape:connector-curvature="0" />
<path
id="path3377"
style="opacity:0.28358017;fill:url(#linearGradient3447);fill-rule:evenodd"
d="m 699.43,482.26 9.62,-4.86 c 10.84,-2.08 15.56,-8.32 15.56,-8.32 l -30.78,-0.18 -15.21,13.19 20.81,0.17 z"
inkscape:connector-curvature="0" />
<rect
id="rect2453"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="84.649002"
x="101.03" />
<rect
id="rect3225"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="88.265999"
x="103.91" />
<rect
id="rect3227"
style="opacity:0.87064999;fill:url(#linearGradient3321)"
height="305.12"
width="480.82999"
y="113.93"
x="130.31" />
<path
id="path3229"
style="opacity:0.26368001;fill:url(#linearGradient3237);fill-rule:evenodd"
d="m 533.41,88.935 -198.8,364.08 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 C 638.55,92.876 632.01,89.321 618.5,89.151 604.3,88.972 533.41,88.93 533.41,88.93 Z"
inkscape:connector-curvature="0" />
<path
id="path3241"
style="opacity:0.16418002;fill:url(#radialGradient3257)"
d="m 372.25,100.72 a 3.47,3.29654 0 1 1 -6.94,0 3.47,3.29654 0 1 1 6.94,0 z"
transform="matrix(1.2563,0,0,1.2563,-94.56,-25.955)"
inkscape:connector-curvature="0" />
<rect
id="rect3279"
style="fill:url(#linearGradient3289);stroke:url(#linearGradient3415);stroke-width:0.9199;stroke-linecap:round;stroke-linejoin:bevel"
height="20.851999"
width="706.5"
y="447.98001"
x="18.601999" />
<path
id="path3379"
style="opacity:0.77612;fill:url(#linearGradient3471);fill-rule:evenodd"
d="m 18.57,469.25 15.782,0.35 16.658,4.21 13.576,6.66 -22.162,0.7 -11.741,-4.56 c -9.907,-2.8 -12.113,-7.36 -12.113,-7.36 z"
inkscape:connector-curvature="0" />
<path
id="rect3323"
style="opacity:0.87064999;fill:url(#linearGradient3339);stroke:#707575;stroke-width:0.94420999;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.51256002"
d="m 315.17,447.12 0,1.81 c 0,5.64 4.46,10.18 10,10.18 l 86.93,0 c 5.54,0 10,-4.54 10,-10.18 l 0,-1.81 -106.93,0 z"
inkscape:connector-curvature="0" />
<rect
id="rect3479"
style="opacity:0.86567;fill:#000000;stroke:#999c9c;stroke-linecap:round;stroke-linejoin:bevel"
height="2.6981001"
width="25.754999"
y="457.29999"
x="657.10999" />
<rect
id="rect3481"
style="fill:#595c5c"
height="0.83490002"
width="536.71002"
y="446.67001"
x="103.41" />
<text
id="text3485"
y="436.30844"
x="344.03226"
xml:space="preserve"
style="font-size:74.73600006px;font-family:Futura;opacity:0.56218998;fill:#000000"><tspan
id="tspan3487"
y="436.30844"
x="344.03226"
style="font-size:9.11419964px;font-family:'Lucida Grande';fill:#ffffff">MoonBook</tspan></text>
<rect
id="rect2453-1"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="83.124794"
x="797.70752" />
<rect
id="rect3225-3"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="86.741798"
x="800.58752" />
<rect
id="rect3227-6"
style="opacity:0.87064999;fill:url(#linearGradient3321-4)"
height="305.12"
width="480.82999"
y="112.4058"
x="826.98755" />
<path
id="path3229-3"
style="opacity:0.26368001;fill:url(#linearGradient3237-0);fill-rule:evenodd"
d="m 1230.0875,87.410787 -198.8,364.080003 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 -0.43,-15.469003 -6.97,-19.024003 -20.48,-19.194003 -14.2,-0.179 -85.09,-0.221 -85.09,-0.221 z"
inkscape:connector-curvature="0" />
<path
id="path3241-5"
style="opacity:0.16418002;fill:url(#radialGradient3257-3)"
d="m 1069.7752,99.055317 a 4.359365,4.141447 0 0 1 -8.7187,0 4.359365,4.141447 0 1 1 8.7187,0 z"
inkscape:connector-curvature="0" />
<rect
style="fill:#00aa80;fill-opacity:0.27979276"
id="rect3409"
width="133.96246"
height="143.09627"
x="471.78766"
y="196.29645" />
<rect
style="fill:#00aa80;fill-opacity:0.27843137"
id="rect3409-0"
width="155.27469"
height="143.09627"
x="823.43921"
y="200.86334" />
</g>
<metadata
id="metadata54">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:publisher>
<cc:Agent
rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title></dc:title>
<dc:date>2011-09-06T14:48:13</dc:date>
<dc:description>Aluminum unibody laptop computer with glare screen.</dc:description>
<dc:source>https://openclipart.org/detail/159331/moonbook-laptop-by-dchest</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>dchest</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>computer</rdf:li>
<rdf:li>laptop</rdf:li>
<rdf:li>mac</rdf:li>
<rdf:li>macbook</rdf:li>
<rdf:li>notebook</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

@ -1,543 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- Made by Dmitry Chestnykh (http://www.codingrobots.com) on Feb 25, 2009 -->
<!-- Public Domain: feel free to do everything you want with this drawing -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:docname="monitor1offmonitor2on.svg"
viewBox="0 0 1400 398.84"
version="1.0"
inkscape:version="0.91 r13725"
width="1400"
height="398.84">
<sodipodi:namedview
id="namedview59"
bordercolor="#666666"
inkscape:pageshadow="2"
guidetolerance="10"
pagecolor="#ffffff"
gridtolerance="10"
inkscape:window-maximized="0"
inkscape:zoom="0.3284502"
objecttolerance="10"
borderopacity="1"
inkscape:current-layer="layer1"
inkscape:cx="505.40679"
inkscape:cy="106.39877"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-width="1160"
showgrid="false"
inkscape:pageopacity="0"
inkscape:window-height="720" />
<defs
id="defs4">
<linearGradient
id="linearGradient3291">
<stop
id="stop3293"
style="stop-color:#676767"
offset="0" />
<stop
id="stop3299"
style="stop-color:#ffffff"
offset=".02" />
<stop
id="stop3297"
style="stop-color:#dfdfe1"
offset=".04" />
<stop
id="stop3303"
style="stop-color:#efeff0"
offset="0.96" />
<stop
id="stop3301"
style="stop-color:#ffffff"
offset="0.98" />
<stop
id="stop3295"
style="stop-color:#676767"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3231">
<stop
id="stop3233"
style="stop-color:#ffffff"
offset="0" />
<stop
id="stop3235"
style="stop-color:#000000;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3237"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,-9.9652,2.1515)"
y1="97.767998"
x1="525.28003" />
<radialGradient
id="radialGradient3257"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1,0,0,0.95,0,5.0362)"
r="3.4688001" />
<linearGradient
id="linearGradient3289"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,-1.0442,36.361)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3321"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,0,0.72801)"
y1="267.47"
x1="130.31">
<stop
id="stop3315"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,1.2423,-21.78)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3415"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,-0.03056,51.617)"
y1="459.79999"
x1="18.142" />
<linearGradient
id="linearGradient3447"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,-3.098,-2.7751)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,-6.2255,-2.7751)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,-3.098,19.287)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,-4.9081,-7.6835)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339-2"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,697.91983,-23.304213)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335-0"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337-1"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471-1"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,691.76943,-9.2077128)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475-6"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477-8"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3289-9"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,695.63333,34.836787)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3415-2"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,696.64703,50.092787)"
y1="459.79999"
x1="18.142" />
<radialGradient
id="radialGradient3257-3"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1.2563,0,0,1.193485,602.11753,-21.152233)"
r="3.4688001" />
<linearGradient
id="linearGradient3237-0"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,686.71233,0.62728715)"
y1="97.767998"
x1="525.28003" />
<linearGradient
id="linearGradient3321-4"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,696.67753,-0.79620285)"
y1="267.47"
x1="130.31">
<stop
id="stop3315-8"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317-9"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3447-1"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,693.57953,-4.2993128)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391-4"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393-4"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466-6"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,693.57953,17.762787)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356-4"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483-4"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358-6"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453-6"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,690.45203,-4.2993128)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372-5"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374-6"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
</defs>
<g
id="layer1"
transform="translate(-18.142,-83.649)">
<path
id="rect3343"
style="fill:url(#linearGradient3453)"
d="m 50.343,458.94 642.03,0 c 10.97,0 19.8,4.6 19.8,10.31 l 2.11,5.71 c -7.73,4.32 -10.94,7.53 -21.91,7.53 l -642.03,0 c -10.968,0 -22.769,-7.05 -25.49,-11.28 l 7.667,-1.23 c 0,-5.7 6.855,-11.04 17.826,-11.04 z"
inkscape:connector-curvature="0" />
<path
id="rect3341"
style="fill:url(#linearGradient3466)"
d="m 35.312,447.96 c -7.029,0 -13.166,2.66 -16.656,6.67 l 0,13.87 c 0,0.49 -0.03,0.97 -0.062,1.46 3.479,4.05 9.647,6.76 16.718,6.76 l 672.1,0 c 7.65,0 14.22,-3.18 17.5,-7.81 -0.22,-1.12 -0.35,-2.27 -0.35,-3.45 l 0,-10.23 c -3.38,-4.35 -9.78,-7.27 -17.15,-7.27 l -672.1,0 z"
inkscape:connector-curvature="0" />
<path
id="path3377"
style="opacity:0.28358017;fill:url(#linearGradient3447);fill-rule:evenodd"
d="m 699.43,482.26 9.62,-4.86 c 10.84,-2.08 15.56,-8.32 15.56,-8.32 l -30.78,-0.18 -15.21,13.19 20.81,0.17 z"
inkscape:connector-curvature="0" />
<rect
id="rect2453"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="84.649002"
x="101.03" />
<rect
id="rect3225"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="88.265999"
x="103.91" />
<rect
id="rect3227"
style="opacity:0.87064999;fill:none"
height="305.12"
width="480.82999"
y="113.93"
x="130.31" />
<path
id="path3229"
style="opacity:0.26368001;fill:url(#linearGradient3237);fill-rule:evenodd"
d="m 533.41,88.935 -198.8,364.08 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 C 638.55,92.876 632.01,89.321 618.5,89.151 604.3,88.972 533.41,88.93 533.41,88.93 Z"
inkscape:connector-curvature="0" />
<path
id="path3241"
style="opacity:0.16418002;fill:url(#radialGradient3257)"
d="m 372.25,100.72 a 3.47,3.29654 0 1 1 -6.94,0 3.47,3.29654 0 1 1 6.94,0 z"
transform="matrix(1.2563,0,0,1.2563,-94.56,-25.955)"
inkscape:connector-curvature="0" />
<rect
id="rect3279"
style="fill:url(#linearGradient3289);stroke:url(#linearGradient3415);stroke-width:0.9199;stroke-linecap:round;stroke-linejoin:bevel"
height="20.851999"
width="706.5"
y="447.98001"
x="18.601999" />
<path
id="path3379"
style="opacity:0.77612;fill:url(#linearGradient3471);fill-rule:evenodd"
d="m 18.57,469.25 15.782,0.35 16.658,4.21 13.576,6.66 -22.162,0.7 -11.741,-4.56 c -9.907,-2.8 -12.113,-7.36 -12.113,-7.36 z"
inkscape:connector-curvature="0" />
<path
id="rect3323"
style="opacity:0.87064999;fill:url(#linearGradient3339);stroke:#707575;stroke-width:0.94420999;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.51256002"
d="m 315.17,447.12 0,1.81 c 0,5.64 4.46,10.18 10,10.18 l 86.93,0 c 5.54,0 10,-4.54 10,-10.18 l 0,-1.81 -106.93,0 z"
inkscape:connector-curvature="0" />
<rect
id="rect3479"
style="opacity:0.86567;fill:#000000;stroke:#999c9c;stroke-linecap:round;stroke-linejoin:bevel"
height="2.6981001"
width="25.754999"
y="457.29999"
x="657.10999" />
<rect
id="rect3481"
style="fill:#595c5c"
height="0.83490002"
width="536.71002"
y="446.67001"
x="103.41" />
<text
id="text3485"
y="436.30844"
x="344.03226"
xml:space="preserve"
style="font-size:74.73600006px;font-family:Futura;opacity:0.56218998;fill:#000000"><tspan
id="tspan3487"
y="436.30844"
x="344.03226"
style="font-size:9.11419964px;font-family:'Lucida Grande';fill:#ffffff">MoonBook</tspan></text>
<rect
id="rect2453-1"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="83.124794"
x="797.70752" />
<rect
id="rect3225-3"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="86.741798"
x="800.58752" />
<rect
id="rect3227-6"
style="opacity:0.87064999;fill:url(#linearGradient3321-4)"
height="305.12"
width="480.82999"
y="112.4058"
x="826.98755" />
<path
id="path3229-3"
style="opacity:0.26368001;fill:url(#linearGradient3237-0);fill-rule:evenodd"
d="m 1230.0875,87.410787 -198.8,364.080003 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 -0.43,-15.469003 -6.97,-19.024003 -20.48,-19.194003 -14.2,-0.179 -85.09,-0.221 -85.09,-0.221 z"
inkscape:connector-curvature="0" />
<path
id="path3241-5"
style="opacity:0.16418002;fill:url(#radialGradient3257-3)"
d="m 1069.7752,99.055317 a 4.359365,4.141447 0 0 1 -8.7187,0 4.359365,4.141447 0 1 1 8.7187,0 z"
inkscape:connector-curvature="0" />
</g>
<metadata
id="metadata54">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:publisher>
<cc:Agent
rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title></dc:title>
<dc:date>2011-09-06T14:48:13</dc:date>
<dc:description>Aluminum unibody laptop computer with glare screen.</dc:description>
<dc:source>https://openclipart.org/detail/159331/moonbook-laptop-by-dchest</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>dchest</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>computer</rdf:li>
<rdf:li>laptop</rdf:li>
<rdf:li>mac</rdf:li>
<rdf:li>macbook</rdf:li>
<rdf:li>notebook</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

@ -1,543 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- Made by Dmitry Chestnykh (http://www.codingrobots.com) on Feb 25, 2009 -->
<!-- Public Domain: feel free to do everything you want with this drawing -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:docname="monitor1onmonitor2ff.svg"
viewBox="0 0 1400 398.84"
version="1.0"
inkscape:version="0.91 r13725"
width="1400"
height="398.84">
<sodipodi:namedview
id="namedview59"
bordercolor="#666666"
inkscape:pageshadow="2"
guidetolerance="10"
pagecolor="#ffffff"
gridtolerance="10"
inkscape:window-maximized="0"
inkscape:zoom="0.3284502"
objecttolerance="10"
borderopacity="1"
inkscape:current-layer="layer1"
inkscape:cx="505.40679"
inkscape:cy="106.39877"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-width="1160"
showgrid="false"
inkscape:pageopacity="0"
inkscape:window-height="720" />
<defs
id="defs4">
<linearGradient
id="linearGradient3291">
<stop
id="stop3293"
style="stop-color:#676767"
offset="0" />
<stop
id="stop3299"
style="stop-color:#ffffff"
offset=".02" />
<stop
id="stop3297"
style="stop-color:#dfdfe1"
offset=".04" />
<stop
id="stop3303"
style="stop-color:#efeff0"
offset="0.96" />
<stop
id="stop3301"
style="stop-color:#ffffff"
offset="0.98" />
<stop
id="stop3295"
style="stop-color:#676767"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3231">
<stop
id="stop3233"
style="stop-color:#ffffff"
offset="0" />
<stop
id="stop3235"
style="stop-color:#000000;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3237"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,-9.9652,2.1515)"
y1="97.767998"
x1="525.28003" />
<radialGradient
id="radialGradient3257"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1,0,0,0.95,0,5.0362)"
r="3.4688001" />
<linearGradient
id="linearGradient3289"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,-1.0442,36.361)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3321"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,0,0.72801)"
y1="267.47"
x1="130.31">
<stop
id="stop3315"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,1.2423,-21.78)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3415"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,-0.03056,51.617)"
y1="459.79999"
x1="18.142" />
<linearGradient
id="linearGradient3447"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,-3.098,-2.7751)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,-6.2255,-2.7751)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,-3.098,19.287)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,-4.9081,-7.6835)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339-2"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,697.91983,-23.304213)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335-0"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337-1"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471-1"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,691.76943,-9.2077128)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475-6"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477-8"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3289-9"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,695.63333,34.836787)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3415-2"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,696.64703,50.092787)"
y1="459.79999"
x1="18.142" />
<radialGradient
id="radialGradient3257-3"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1.2563,0,0,1.193485,602.11753,-21.152233)"
r="3.4688001" />
<linearGradient
id="linearGradient3237-0"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,686.71233,0.62728715)"
y1="97.767998"
x1="525.28003" />
<linearGradient
id="linearGradient3321-4"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,696.67753,-0.79620285)"
y1="267.47"
x1="130.31">
<stop
id="stop3315-8"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317-9"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3447-1"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,693.57953,-4.2993128)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391-4"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393-4"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466-6"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,693.57953,17.762787)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356-4"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483-4"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358-6"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453-6"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,690.45203,-4.2993128)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372-5"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374-6"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
</defs>
<g
id="layer1"
transform="translate(-18.142,-83.649)">
<path
id="rect3343"
style="fill:url(#linearGradient3453)"
d="m 50.343,458.94 642.03,0 c 10.97,0 19.8,4.6 19.8,10.31 l 2.11,5.71 c -7.73,4.32 -10.94,7.53 -21.91,7.53 l -642.03,0 c -10.968,0 -22.769,-7.05 -25.49,-11.28 l 7.667,-1.23 c 0,-5.7 6.855,-11.04 17.826,-11.04 z"
inkscape:connector-curvature="0" />
<path
id="rect3341"
style="fill:url(#linearGradient3466)"
d="m 35.312,447.96 c -7.029,0 -13.166,2.66 -16.656,6.67 l 0,13.87 c 0,0.49 -0.03,0.97 -0.062,1.46 3.479,4.05 9.647,6.76 16.718,6.76 l 672.1,0 c 7.65,0 14.22,-3.18 17.5,-7.81 -0.22,-1.12 -0.35,-2.27 -0.35,-3.45 l 0,-10.23 c -3.38,-4.35 -9.78,-7.27 -17.15,-7.27 l -672.1,0 z"
inkscape:connector-curvature="0" />
<path
id="path3377"
style="opacity:0.28358017;fill:url(#linearGradient3447);fill-rule:evenodd"
d="m 699.43,482.26 9.62,-4.86 c 10.84,-2.08 15.56,-8.32 15.56,-8.32 l -30.78,-0.18 -15.21,13.19 20.81,0.17 z"
inkscape:connector-curvature="0" />
<rect
id="rect2453"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="84.649002"
x="101.03" />
<rect
id="rect3225"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="88.265999"
x="103.91" />
<rect
id="rect3227"
style="opacity:0.87064999;fill:url(#linearGradient3321)"
height="305.12"
width="480.82999"
y="113.93"
x="130.31" />
<path
id="path3229"
style="opacity:0.26368001;fill:url(#linearGradient3237);fill-rule:evenodd"
d="m 533.41,88.935 -198.8,364.08 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 C 638.55,92.876 632.01,89.321 618.5,89.151 604.3,88.972 533.41,88.93 533.41,88.93 Z"
inkscape:connector-curvature="0" />
<path
id="path3241"
style="opacity:0.16418002;fill:url(#radialGradient3257)"
d="m 372.25,100.72 a 3.47,3.29654 0 1 1 -6.94,0 3.47,3.29654 0 1 1 6.94,0 z"
transform="matrix(1.2563,0,0,1.2563,-94.56,-25.955)"
inkscape:connector-curvature="0" />
<rect
id="rect3279"
style="fill:url(#linearGradient3289);stroke:url(#linearGradient3415);stroke-width:0.9199;stroke-linecap:round;stroke-linejoin:bevel"
height="20.851999"
width="706.5"
y="447.98001"
x="18.601999" />
<path
id="path3379"
style="opacity:0.77612;fill:url(#linearGradient3471);fill-rule:evenodd"
d="m 18.57,469.25 15.782,0.35 16.658,4.21 13.576,6.66 -22.162,0.7 -11.741,-4.56 c -9.907,-2.8 -12.113,-7.36 -12.113,-7.36 z"
inkscape:connector-curvature="0" />
<path
id="rect3323"
style="opacity:0.87064999;fill:url(#linearGradient3339);stroke:#707575;stroke-width:0.94420999;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.51256002"
d="m 315.17,447.12 0,1.81 c 0,5.64 4.46,10.18 10,10.18 l 86.93,0 c 5.54,0 10,-4.54 10,-10.18 l 0,-1.81 -106.93,0 z"
inkscape:connector-curvature="0" />
<rect
id="rect3479"
style="opacity:0.86567;fill:#000000;stroke:#999c9c;stroke-linecap:round;stroke-linejoin:bevel"
height="2.6981001"
width="25.754999"
y="457.29999"
x="657.10999" />
<rect
id="rect3481"
style="fill:#595c5c"
height="0.83490002"
width="536.71002"
y="446.67001"
x="103.41" />
<text
id="text3485"
y="436.30844"
x="344.03226"
xml:space="preserve"
style="font-size:74.73600006px;font-family:Futura;opacity:0.56218998;fill:#000000"><tspan
id="tspan3487"
y="436.30844"
x="344.03226"
style="font-size:9.11419964px;font-family:'Lucida Grande';fill:#ffffff">MoonBook</tspan></text>
<rect
id="rect2453-1"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="83.124794"
x="797.70752" />
<rect
id="rect3225-3"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="86.741798"
x="800.58752" />
<rect
id="rect3227-6"
style="opacity:0.87064999;fill:none"
height="305.12"
width="480.82999"
y="112.4058"
x="826.98755" />
<path
id="path3229-3"
style="opacity:0.26368001;fill:url(#linearGradient3237-0);fill-rule:evenodd"
d="m 1230.0875,87.410787 -198.8,364.080003 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 -0.43,-15.469003 -6.97,-19.024003 -20.48,-19.194003 -14.2,-0.179 -85.09,-0.221 -85.09,-0.221 z"
inkscape:connector-curvature="0" />
<path
id="path3241-5"
style="opacity:0.16418002;fill:url(#radialGradient3257-3)"
d="m 1069.7752,99.055317 a 4.359365,4.141447 0 0 1 -8.7187,0 4.359365,4.141447 0 1 1 8.7187,0 z"
inkscape:connector-curvature="0" />
</g>
<metadata
id="metadata54">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:publisher>
<cc:Agent
rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title></dc:title>
<dc:date>2011-09-06T14:48:13</dc:date>
<dc:description>Aluminum unibody laptop computer with glare screen.</dc:description>
<dc:source>https://openclipart.org/detail/159331/moonbook-laptop-by-dchest</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>dchest</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>computer</rdf:li>
<rdf:li>laptop</rdf:li>
<rdf:li>mac</rdf:li>
<rdf:li>macbook</rdf:li>
<rdf:li>notebook</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

@ -1,557 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<!-- Made by Dmitry Chestnykh (http://www.codingrobots.com) on Feb 25, 2009 -->
<!-- Public Domain: feel free to do everything you want with this drawing -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg2"
sodipodi:docname="unified.svg"
viewBox="0 0 1400 398.84"
version="1.0"
inkscape:version="0.91 r13725"
width="1400"
height="398.84">
<sodipodi:namedview
id="namedview59"
bordercolor="#666666"
inkscape:pageshadow="2"
guidetolerance="10"
pagecolor="#ffffff"
gridtolerance="10"
inkscape:window-maximized="0"
inkscape:zoom="0.3284502"
objecttolerance="10"
borderopacity="1"
inkscape:current-layer="layer1"
inkscape:cx="505.40679"
inkscape:cy="106.39877"
inkscape:window-y="0"
inkscape:window-x="0"
inkscape:window-width="1160"
showgrid="false"
inkscape:pageopacity="0"
inkscape:window-height="720" />
<defs
id="defs4">
<linearGradient
id="linearGradient3291">
<stop
id="stop3293"
style="stop-color:#676767"
offset="0" />
<stop
id="stop3299"
style="stop-color:#ffffff"
offset=".02" />
<stop
id="stop3297"
style="stop-color:#dfdfe1"
offset=".04" />
<stop
id="stop3303"
style="stop-color:#efeff0"
offset="0.96" />
<stop
id="stop3301"
style="stop-color:#ffffff"
offset="0.98" />
<stop
id="stop3295"
style="stop-color:#676767"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3231">
<stop
id="stop3233"
style="stop-color:#ffffff"
offset="0" />
<stop
id="stop3235"
style="stop-color:#000000;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3237"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,-9.9652,2.1515)"
y1="97.767998"
x1="525.28003" />
<radialGradient
id="radialGradient3257"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1,0,0,0.95,0,5.0362)"
r="3.4688001" />
<linearGradient
id="linearGradient3289"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,-1.0442,36.361)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3321"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,0,0.72801)"
y1="267.47"
x1="130.31">
<stop
id="stop3315"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,1.2423,-21.78)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3415"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,-0.03056,51.617)"
y1="459.79999"
x1="18.142" />
<linearGradient
id="linearGradient3447"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,-3.098,-2.7751)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,-6.2255,-2.7751)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,-3.098,19.287)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,-4.9081,-7.6835)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3339-2"
y2="472.51999"
gradientUnits="userSpaceOnUse"
x2="359.07999"
gradientTransform="matrix(0.99992,0,0,1.0177,697.91983,-23.304213)"
y1="465.67001"
x1="359.07999">
<stop
id="stop3335-0"
style="stop-color:#e5e6e8"
offset="0" />
<stop
id="stop3337-1"
style="stop-color:#4c5252"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3471-1"
y2="473.95001"
gradientUnits="userSpaceOnUse"
x2="43.948002"
gradientTransform="matrix(1.0578,0,0,1.0104,691.76943,-9.2077128)"
y1="479.5"
x1="38.150002">
<stop
id="stop3475-6"
style="stop-color:#000000;stop-opacity:.30348"
offset="0" />
<stop
id="stop3477-8"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3289-9"
y2="438.17001"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="724.58002"
gradientTransform="matrix(1.0028,0,0,0.9632,695.63333,34.836787)"
y1="438.17001"
x1="19.122999" />
<linearGradient
id="linearGradient3415-2"
y2="459.79999"
xlink:href="#linearGradient3291"
gradientUnits="userSpaceOnUse"
x2="725.56"
gradientTransform="matrix(1.0001,0,0,0.88472,696.64703,50.092787)"
y1="459.79999"
x1="18.142" />
<radialGradient
id="radialGradient3257-3"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
cy="101.43"
cx="368.78"
gradientTransform="matrix(1.2563,0,0,1.193485,602.11753,-21.152233)"
r="3.4688001" />
<linearGradient
id="linearGradient3237-0"
y2="423.04001"
xlink:href="#linearGradient3231"
gradientUnits="userSpaceOnUse"
x2="656.59998"
gradientTransform="matrix(1.0092,0,0,1.0058,686.71233,0.62728715)"
y1="97.767998"
x1="525.28003" />
<linearGradient
id="linearGradient3321-4"
y2="267.47"
gradientUnits="userSpaceOnUse"
x2="611.14001"
gradientTransform="matrix(1,0,0,0.99361,696.67753,-0.79620285)"
y1="267.47"
x1="130.31">
<stop
id="stop3315-8"
style="stop-color:#9c5da6"
offset="0" />
<stop
id="stop3317-9"
style="stop-color:#5b325b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3447-1"
y2="478.26999"
gradientUnits="userSpaceOnUse"
x2="695.5"
gradientTransform="matrix(1.0083,0,0,1,693.57953,-4.2993128)"
y1="484.17001"
x1="700.01001">
<stop
id="stop3391-4"
style="stop-color:#000000"
offset="0" />
<stop
id="stop3393-4"
style="stop-color:#fbfcff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3466-6"
y2="485.04001"
gradientUnits="userSpaceOnUse"
x2="334.45001"
gradientTransform="matrix(1.0083,0,0,0.95399,693.57953,17.762787)"
y1="470.29999"
x1="334.45001">
<stop
id="stop3356-4"
style="stop-color:#d3d5d7"
offset="0" />
<stop
id="stop3483-4"
style="stop-color:#86898a"
offset=".5" />
<stop
id="stop3358-6"
style="stop-color:#171b1b"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient3453-6"
y2="485.26999"
gradientUnits="userSpaceOnUse"
x2="329.66"
gradientTransform="matrix(1.0127,0,0,1,690.45203,-4.2993128)"
y1="473.48999"
x1="329.66">
<stop
id="stop3372-5"
style="stop-color:#8f9091"
offset="0" />
<stop
id="stop3374-6"
style="stop-color:#323b3b"
offset="1" />
</linearGradient>
</defs>
<g
id="layer1"
transform="translate(-18.142,-83.649)">
<path
id="rect3343"
style="fill:url(#linearGradient3453)"
d="m 50.343,458.94 642.03,0 c 10.97,0 19.8,4.6 19.8,10.31 l 2.11,5.71 c -7.73,4.32 -10.94,7.53 -21.91,7.53 l -642.03,0 c -10.968,0 -22.769,-7.05 -25.49,-11.28 l 7.667,-1.23 c 0,-5.7 6.855,-11.04 17.826,-11.04 z"
inkscape:connector-curvature="0" />
<path
id="rect3341"
style="fill:url(#linearGradient3466)"
d="m 35.312,447.96 c -7.029,0 -13.166,2.66 -16.656,6.67 l 0,13.87 c 0,0.49 -0.03,0.97 -0.062,1.46 3.479,4.05 9.647,6.76 16.718,6.76 l 672.1,0 c 7.65,0 14.22,-3.18 17.5,-7.81 -0.22,-1.12 -0.35,-2.27 -0.35,-3.45 l 0,-10.23 c -3.38,-4.35 -9.78,-7.27 -17.15,-7.27 l -672.1,0 z"
inkscape:connector-curvature="0" />
<path
id="path3377"
style="opacity:0.28358017;fill:url(#linearGradient3447);fill-rule:evenodd"
d="m 699.43,482.26 9.62,-4.86 c 10.84,-2.08 15.56,-8.32 15.56,-8.32 l -30.78,-0.18 -15.21,13.19 20.81,0.17 z"
inkscape:connector-curvature="0" />
<rect
id="rect2453"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="84.649002"
x="101.03" />
<rect
id="rect3225"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="88.265999"
x="103.91" />
<rect
id="rect3227"
style="opacity:0.87064999;fill:url(#linearGradient3321)"
height="305.12"
width="480.82999"
y="113.93"
x="130.31" />
<path
id="path3229"
style="opacity:0.26368001;fill:url(#linearGradient3237);fill-rule:evenodd"
d="m 533.41,88.935 -198.8,364.08 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 C 638.55,92.876 632.01,89.321 618.5,89.151 604.3,88.972 533.41,88.93 533.41,88.93 Z"
inkscape:connector-curvature="0" />
<path
id="path3241"
style="opacity:0.16418002;fill:url(#radialGradient3257)"
d="m 372.25,100.72 a 3.47,3.29654 0 1 1 -6.94,0 3.47,3.29654 0 1 1 6.94,0 z"
transform="matrix(1.2563,0,0,1.2563,-94.56,-25.955)"
inkscape:connector-curvature="0" />
<rect
id="rect3279"
style="fill:url(#linearGradient3289);stroke:url(#linearGradient3415);stroke-width:0.9199;stroke-linecap:round;stroke-linejoin:bevel"
height="20.851999"
width="706.5"
y="447.98001"
x="18.601999" />
<path
id="path3379"
style="opacity:0.77612;fill:url(#linearGradient3471);fill-rule:evenodd"
d="m 18.57,469.25 15.782,0.35 16.658,4.21 13.576,6.66 -22.162,0.7 -11.741,-4.56 c -9.907,-2.8 -12.113,-7.36 -12.113,-7.36 z"
inkscape:connector-curvature="0" />
<path
id="rect3323"
style="opacity:0.87064999;fill:url(#linearGradient3339);stroke:#707575;stroke-width:0.94420999;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.51256002"
d="m 315.17,447.12 0,1.81 c 0,5.64 4.46,10.18 10,10.18 l 86.93,0 c 5.54,0 10,-4.54 10,-10.18 l 0,-1.81 -106.93,0 z"
inkscape:connector-curvature="0" />
<rect
id="rect3479"
style="opacity:0.86567;fill:#000000;stroke:#999c9c;stroke-linecap:round;stroke-linejoin:bevel"
height="2.6981001"
width="25.754999"
y="457.29999"
x="657.10999" />
<rect
id="rect3481"
style="fill:#595c5c"
height="0.83490002"
width="536.71002"
y="446.67001"
x="103.41" />
<text
id="text3485"
y="436.30844"
x="344.03226"
xml:space="preserve"
style="font-size:74.73600006px;font-family:Futura;opacity:0.56218998;fill:#000000"><tspan
id="tspan3487"
y="436.30844"
x="344.03226"
style="font-size:9.11419964px;font-family:'Lucida Grande';fill:#ffffff">MoonBook</tspan></text>
<rect
id="rect2453-1"
style="fill:#d0d0d2;stroke:#b3b7b7;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel"
rx="19.999001"
ry="21.165001"
height="384.84"
width="542.42999"
y="83.124794"
x="797.70752" />
<rect
id="rect3225-3"
style="fill:#000000;stroke:#000000;stroke-width:1.00880003;stroke-linecap:round;stroke-linejoin:bevel"
rx="17"
ry="17"
height="376.78"
width="535.76001"
y="86.741798"
x="800.58752" />
<rect
id="rect3227-6"
style="opacity:0.87064999;fill:url(#linearGradient3321-4)"
height="305.12"
width="480.82999"
y="112.4058"
x="826.98755" />
<path
id="path3229-3"
style="opacity:0.26368001;fill:url(#linearGradient3237-0);fill-rule:evenodd"
d="m 1230.0875,87.410787 -198.8,364.080003 303.8,1.02 c 0,0 0.98,-330.92 0.57,-345.69 -0.43,-15.469003 -6.97,-19.024003 -20.48,-19.194003 -14.2,-0.179 -85.09,-0.221 -85.09,-0.221 z"
inkscape:connector-curvature="0" />
<path
id="path3241-5"
style="opacity:0.16418002;fill:url(#radialGradient3257-3)"
d="m 1069.7752,99.055317 a 4.359365,4.141447 0 0 1 -8.7187,0 4.359365,4.141447 0 1 1 8.7187,0 z"
inkscape:connector-curvature="0" />
<rect
style="fill:#00aa80;fill-opacity:0.27979276"
id="rect3409"
width="295.32635"
height="143.09627"
x="237.35332"
y="196.29645" />
<rect
style="fill:#00aa80;fill-opacity:0.27843139"
id="rect3409-0"
width="295.32635"
height="143.09627"
x="920.86646"
y="200.86334" />
</g>
<metadata
id="metadata54">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:publisher>
<cc:Agent
rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title />
<dc:date>2011-09-06T14:48:13</dc:date>
<dc:description>Aluminum unibody laptop computer with glare screen.</dc:description>
<dc:source>https://openclipart.org/detail/159331/moonbook-laptop-by-dchest</dc:source>
<dc:creator>
<cc:Agent>
<dc:title>dchest</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>computer</rdf:li>
<rdf:li>laptop</rdf:li>
<rdf:li>mac</rdf:li>
<rdf:li>macbook</rdf:li>
<rdf:li>notebook</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

Before

Width:  |  Height:  |  Size: 17 KiB

@ -1,34 +0,0 @@
Info for developers
==============
lxqt-config-monitor has 3 important modules:
- Monitor (monitor.h and monitor.cpp)
- MonitorSettingsDialog (monitorsettingsdialog.h and monitorsettingsdialog.cpp)
- XRandR (xrandr.h and xrandr.cpp)
MonitorSettingsDialog module contains all code related to GUI.
XRandR module contains code related to get or set settings from XRandR X11 driver. XRandR doesn't need MonitorSettingsDialog to work.
Monitor module is a glue between MonitorSettingsDialog and XRandR.
Indeep, XRandR module can be replaced and other modules won't need changes. Example, Wayland or Mir can use other tool for monitor settings. Other module can be added to work with that tool.
Module XRandR
============
Contains an implementation of class Backend. This class has got two methods in order to get or set configs.
This is only a simple implementation. It reads info from a pipe to a xrandr command.
Module Monitor
============
Contains 4 classes:
- Backend: It is an abstract class. It has to be implemented by monitor drivers. In X11 this driver is XRandR
- MonitorInfo: This class contains all information about one monitor. It is obtained from Backend::getMonitorsInfo method.
- MonitorSettings: This class is used by Backend::setMonitorsSettings method. This class contains settings for one monitor.
- Monitor: This class is used by MonitorSettingsDialog in order to store monitor settings.

@ -0,0 +1,89 @@
/*
Copyright (C) 2015 P.L. Lucas <selairi@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "loadsettings.h"
#include <KScreen/Output>
#include <KScreen/Config>
#include <KScreen/GetConfigOperation>
#include <KScreen/SetConfigOperation>
#include <QJsonObject>
#include <QJsonArray>
#include <QSettings>
#include <QJsonDocument>
#include <KScreen/EDID>
LoadSettings::LoadSettings(QObject *parent):QObject(parent)
{
KScreen::GetConfigOperation *operation = new KScreen::GetConfigOperation();
connect(operation, &KScreen::GetConfigOperation::finished, [this, operation] (KScreen::ConfigOperation *op) {
KScreen::GetConfigOperation *configOp = qobject_cast<KScreen::GetConfigOperation *>(op);
if (configOp)
{
loadConfiguration(configOp->config());
operation->deleteLater();
}
});
}
void LoadSettings::loadConfiguration(KScreen::ConfigPtr config)
{
QSettings settings("LXQt", "lxqt-config-monitor");
QJsonDocument document = QJsonDocument::fromJson( settings.value("currentConfig").toByteArray() );
QJsonObject json = document.object();
QJsonArray array = json["outputs"].toArray();
KScreen::OutputList outputs = config->outputs();
for (const KScreen::OutputPtr &output : outputs)
{
qDebug() << "Output: " << output->name();
for(int i=0;i<array.size();i++)
{
QJsonObject monitorSettings = array[i].toObject();
if( monitorSettings["name"] == output->name() )
{
KScreen::Edid* edid = output->edid();
if (edid && edid->isValid())
if( monitorSettings["hash"].toString() != edid->hash() )
{
qDebug() << "Hash: " << monitorSettings["hash"].toString() << "==" << edid->hash();
return exit(1); // Saved settings are from other monitor
}
if( monitorSettings["connected"].toBool() != output->isConnected() )
return exit(2); // Saved settings are from other monitor
if( !output->isConnected() )
continue;
output->setEnabled( monitorSettings["enabled"].toBool() );
output->setPrimary( monitorSettings["primary"].toBool() );
output->setPos( QPoint(monitorSettings["xPos"].toInt(),monitorSettings["yPos"].toInt()) );
output->setCurrentModeId( monitorSettings["currentMode"].toString() );
output->setRotation( (KScreen::Output::Rotation)(monitorSettings["rotation"].toInt()) );
}
}
}
if (KScreen::Config::canBeApplied(config))
KScreen::SetConfigOperation(config).exec();
exit(0);
}

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2014 P.L. Lucas <selairi@gmail.com> Copyright (C) 2015 P.L. Lucas <selairi@gmail.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -16,21 +16,27 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef _XRANDR_H_ #ifndef __LOADSETTINGS_H__
#define _XRANDR_H_ #define __LOADSETTINGS_H__
#include "monitor.h"
#include <QList>
#include <KScreen/GetConfigOperation>
#include <KScreen/SetConfigOperation>
class LoadSettings : public QObject
{
Q_OBJECT
class XRandRBackend: public MonitorSettingsBackend {
Q_OBJECT
public: public:
// Execute xrandr command and read its output LoadSettings(QObject *parent = 0);
QList<MonitorInfo*> getMonitorsInfo();
// Set changes in xrandr private Q_SLOTS:
bool setMonitorsSettings(const QList<MonitorSettings*> monitors); void loadConfiguration(KScreen::ConfigPtr config);
QString getCommand(const QList<MonitorSettings*> monitors);
private:
// Configutarions
KScreen::ConfigPtr mConfig;
}; };
#endif #endif // __LOADSETTINGS_H__

@ -16,60 +16,56 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#include "main.h"
#include <LXQt/SingleApplication> #include <LXQt/SingleApplication>
#include <LXQt/ConfigDialog> #include <LXQt/ConfigDialog>
#include <LXQt/Settings> #include <LXQt/Settings>
#include <QDebug> #include <QDebug>
#include <QProcess>
#include <QStandardPaths>
#include <QCommandLineParser>
#include "monitorsettingsdialog.h" #include "monitorsettingsdialog.h"
#include "quickoptions.h" #include <QCoreApplication>
#include "xrandr.h" #include "loadsettings.h"
#include "savesettings.h"
int main(int argc, char** argv) {
LXQt::SingleApplication app(argc, argv);
QByteArray configName = qgetenv("LXQT_SESSION_CONFIG"); static bool loadSettingsOk(int argc, char** argv)
if(configName.isEmpty()) {
configName = "MonitorSettings"; for(int i=0; i<argc; i++)
LXQt::Settings settings(configName); {
LXQt::ConfigDialog dlg(QObject::tr("Monitor Settings"), &settings); if(QString(argv[i]) == "-l")
dlg.setButtons(QDialogButtonBox::QDialogButtonBox::Apply|QDialogButtonBox::Close); return true;
app.setActivationWindow(&dlg); }
dlg.setWindowIcon(QIcon::fromTheme("preferences-desktop-display")); return false;
}
XRandRBackend *xrandr = new XRandRBackend(); int main(int argc, char** argv)
MonitorSettingsDialog *monitorSettingsDialog = new MonitorSettingsDialog(xrandr, &settings); {
monitorSettingsDialog->connect(&dlg, SIGNAL(clicked(QDialogButtonBox::StandardButton)), SLOT(processClickedFromDialog(QDialogButtonBox::StandardButton))); if( loadSettingsOk(argc, argv) )
{ {
QList<MonitorInfo*> monitorsInfo = xrandr->getMonitorsInfo(); // If -l option is provided, settings are loaded and app is closed.
// If this is a laptop and there is an external monitor, offer quick options QCoreApplication app(argc, argv);
if(monitorsInfo.length() == 2) { LoadSettings load;
QuickOptions *quickOptions = new QuickOptions(); return app.exec();
monitorSettingsDialog->connect(quickOptions->ui.useBoth, SIGNAL(clicked(bool)), SLOT(onUseBoth())); }
monitorSettingsDialog->connect(quickOptions->ui.externalOnly, SIGNAL(clicked(bool)), SLOT(onExternalOnly()));
monitorSettingsDialog->connect(quickOptions->ui.laptopOnly, SIGNAL(clicked(bool)), SLOT(onLaptopOnly()));
monitorSettingsDialog->connect(quickOptions->ui.extended, SIGNAL(clicked(bool)), SLOT(onExtended()));
dlg.addPage(quickOptions, QObject::tr("Quick Options"), "format-justify-left");
}
}
dlg.addPage(monitorSettingsDialog, QObject::tr("Settings"), "preferences-desktop-display"); LXQt::SingleApplication app(argc, argv);
SaveSettings *saveSettings = new SaveSettings(&settings); // Command line options
saveSettings->setHardwareIdentifier(monitorSettingsDialog->getHardwareIdentifier()); QCommandLineParser parser;
// monitorSettingsDialog->connect(saveSettings->ui.saveSettings, SIGNAL(clicked(bool)), SLOT(saveSettingsSettings())); QCommandLineOption loadOption(QStringList() << "l" << "loadlast",
monitorSettingsDialog->connect(saveSettings->ui.save, SIGNAL(clicked(bool)), SLOT(saveSettings())); app.tr("Load last settings."));
saveSettings->connect(monitorSettingsDialog, SIGNAL(settingsSaved()), SLOT(loadSettings())); parser.addOption(loadOption);
QCommandLineOption helpOption = parser.addHelpOption();
parser.addOption(loadOption);
parser.addOption(helpOption);
dlg.addPage(saveSettings, QObject::tr("Save settings"), "system-run"); //parser.process(app);
//bool loadLastSettings = parser.isSet(loadOption);
QObject::connect(&dlg, SIGNAL(reset()), &dlg, SLOT(accept())); MonitorSettingsDialog dlg;
app.setActivationWindow(&dlg);
dlg.setWindowIcon(QIcon::fromTheme("preferences-desktop-display"));
dlg.show();
if(QDialog::Accepted == dlg.exec() ) { return app.exec();
main(argc, argv);
}
return 0;
} }

@ -1,123 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MonitorSettingsDialog</class>
<widget class="QDialog" name="MonitorSettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>527</width>
<height>362</height>
</rect>
</property>
<property name="windowTitle">
<string>Monitor Settings</string>
</property>
<property name="windowIcon">
<iconset theme="preferences-desktop-display">
<normaloff/>
</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1">
<item>
<widget class="QListWidget" name="monitorList">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QCheckBox" name="unify">
<property name="text">
<string>Unify all monitors</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="positionPushButton">
<property name="text">
<string>Monitor Position</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="primaryLabel">
<property name="text">
<string>Primary monitor:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="primaryCombo">
<item>
<property name="text">
<string/>
</property>
</item>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>monitorList</sender>
<signal>currentRowChanged(int)</signal>
<receiver>stackedWidget</receiver>
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>146</x>
<y>146</y>
</hint>
<hint type="destinationlabel">
<x>394</x>
<y>146</y>
</hint>
</hints>
</connection>
</connections>
</ui>

@ -17,55 +17,57 @@
*/ */
#include "monitor.h" #include "monitor.h"
#include <QDebug>
bool MonitorInfo::LVDS_Ok = false; bool MonitorInfo::LVDS_Ok = false;
bool MonitorSettingsBackend::isUnified(const QList< MonitorInfo* > monitors) { QSize sizeFromString(QString str)
Q_FOREACH(MonitorInfo * monitor, monitors) { {
if(monitor->position != MonitorSettings::None) int width = 0;
return false; int height = 0;
} int x = str.indexOf('x');
return true; if (x > 0)
{
width = str.left(x).toInt();
height = str.mid(x + 1).toInt();
}
return QSize(width, height);
} }
MonitorSettings::MonitorSettings(QObject* parent): QObject(parent) { MonitorSettings::MonitorSettings(QObject* parent) :
position = None; QObject(parent)
primaryOk = false; {
enabledOk = false; position = None;
primaryOk = false;
enabledOk = false;
} }
MonitorInfo::MonitorInfo(QObject* parent): MonitorSettings(parent) { MonitorInfo::MonitorInfo(QObject* parent) :
MonitorSettings(parent)
{
} }
QString MonitorInfo::humanReadableName() { QString MonitorInfo::humanReadableName()
if(name.startsWith("LVDS")) {
return tr("Laptop LCD Monitor"); if (name.startsWith("LVDS"))
else if(name.startsWith("VGA") || name.startsWith("Analog")) return tr("Laptop LCD Monitor");
return LVDS_Ok ? tr("External VGA Monitor") : tr("VGA Monitor"); else if (name.startsWith("VGA") || name.startsWith("Analog"))
else if(name.startsWith("DVI") || name.startsWith("TMDS") || name.startsWith("Digital") || name.startsWith("LVDS")) return LVDS_Ok ? tr("External VGA Monitor") : tr("VGA Monitor");
return LVDS_Ok ? tr("External DVI Monitor") : tr("DVI Monitor"); else if (name.startsWith("DVI") || name.startsWith("TMDS") || name.startsWith("Digital") || name.startsWith("LVDS"))
else if(name.startsWith("TV") || name.startsWith("S-Video")) return LVDS_Ok ? tr("External DVI Monitor") : tr("DVI Monitor");
return tr("TV"); else if (name.startsWith("TV") || name.startsWith("S-Video"))
else if(name == "default") return tr("TV");
return tr("Default Monitor"); else if (name == "default")
return name; return tr("Default Monitor");
}
return name;
}
MonitorMode::MonitorMode(QString modeName, QObject *parent):QObject(parent) { QSize MonitorSettings::currentSize()
mode = modeName; {
width = -1; return sizeFromString(currentMode);
height = -1;
} }
QSize sizeFromString(QString str) { QRect MonitorSettings::geometry()
int width = 0; {
int height = 0; return QRect(QPoint(xPos, yPos), currentSize());
int x = str.indexOf('x');
if(x > 0) {
width = str.left(x).toInt();
height = str.mid(x + 1).toInt();
}
return QSize(width, height);
} }

@ -16,7 +16,6 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef _MONITOR_H_ #ifndef _MONITOR_H_
#define _MONITOR_H_ #define _MONITOR_H_
@ -25,69 +24,51 @@
#include <QHash> #include <QHash>
#include <QList> #include <QList>
#include <QRect> #include <QRect>
#include <KScreen/Config>
//Settings to pass to backend //Settings to pass to backend
class MonitorSettings: public QObject { class MonitorSettings : public QObject
Q_OBJECT {
public: Q_OBJECT
MonitorSettings(QObject* parent = 0);
QString name;
QString currentMode;
QString currentRate;
QString gamma;
QString brightness;
QString backlight;
QString backlightMin;
QString backlightMax;
int xPos;
int yPos;
bool enabledOk;
enum Position {None = 0, Manual};
Position position;
bool primaryOk;
};
// Monitor mode and suported rates
class MonitorMode: public QObject {
Q_OBJECT
public: public:
MonitorMode(QString modeName, QObject *parent = 0); MonitorSettings(QObject* parent = 0);
QString mode; QString name;
QStringList modeLines; QString currentMode;
int width; QString currentRate;
int height; QString gamma;
int xPos;
int yPos;
bool enabledOk;
enum Position {None = 0, Manual};
Position position;
bool primaryOk;
QSize currentSize();
QRect geometry();
}; };
// Monitor information from backend // Monitor information from backend
class MonitorInfo: public MonitorSettings { class MonitorInfo : public MonitorSettings
Q_OBJECT {
public: Q_OBJECT
MonitorInfo(QObject* parent = 0);
QStringList modes; // Modes of this monitor in order
QHash <QString, MonitorMode*> monitorModes; // Rates suported by each mode
QString preferredMode;
QString preferredRate;
QString edid; // EDID data, not used yet, can be used to detect vendor name of the monitor
QString vendor;
static bool LVDS_Ok; // Is true if LVDS (Laptop monitor) is connected.
QString humanReadableName();
};
class MonitorSettingsBackend: public QObject {
Q_OBJECT
public: public:
virtual QList<MonitorInfo*> getMonitorsInfo() = 0; KScreen::ConfigPtr mConfig;
virtual bool setMonitorsSettings(const QList<MonitorSettings*> monitors) = 0;
virtual QString getCommand(const QList<MonitorSettings*> monitors) = 0; MonitorInfo(QObject* parent = 0);
virtual bool isUnified(const QList<MonitorInfo*> monitors); QStringList modes; // Modes of this monitor in order
QHash<QString, QStringList> modeLines; // Rates suported by each mode
QString preferredMode;
QString preferredRate;
QString edid; // EDID data, not used yet, can be used to detect vendor name of the monitor
QString vendor;
static bool LVDS_Ok; // Is true if LVDS (Laptop monitor) is connected.
QString humanReadableName();
}; };
// Gets size from string rate. String rate format is "widthxheight". Example: 800x600
/**Gets size from string rate. String rate format is "widthxheight". Example: 800x600*/
QSize sizeFromString(QString str); QSize sizeFromString(QString str);
#endif // _MONITOR_H_ #endif // _MONITOR_H_

@ -1,11 +1,20 @@
/* /*
* Copyright (c) LXQt contributors. * Copyright (C) 2014 P.L. Lucas <selairi@gmail.com>
* *
* This file is part of the LXQt project. <http://lxqt.org> * This program is free software; you can redistribute it and/or modify
* It is distributed under the LGPL 2.1 or later license. * it under the terms of the GNU General Public License as published by
* Please refer to the LICENSE file for a copy of the license, and * the Free Software Foundation; either version 2 of the License, or
* the AUTHORS file for copyright and authorship information. * (at your option) any later version.
*/ *
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "monitorpicture.h" #include "monitorpicture.h"
@ -16,250 +25,361 @@
#include <QVector2D> #include <QVector2D>
#include "configure.h" #include "configure.h"
MonitorPictureProxy::MonitorPictureProxy(QObject *parent, MonitorPicture *monitorPicture):QObject(parent)
MonitorPictureDialog::MonitorPictureDialog(QWidget * parent, Qt::WindowFlags f): QDialog(parent,f) { {
ui.setupUi(this); this->monitorPicture = monitorPicture;
} }
void MonitorPictureProxy::updateSize()
{
KScreen::OutputPtr output = monitorPicture->monitorWidget->output;
QSize size = output->currentMode()->size();
monitorPicture->updateSize(size);
}
void MonitorPictureDialog::setScene(QList<MonitorWidget*> monitors) { void MonitorPictureProxy::updatePosition()
int monitorsWidth = 100.0; {
int monitorsHeight = 100.0; KScreen::OutputPtr output = monitorPicture->monitorWidget->output;
QGraphicsScene *scene = new QGraphicsScene(); QPoint pos = output->pos();
Q_FOREACH(MonitorWidget * monitor, monitors) { //qDebug() << "MonitorPictureProxy:updatePosition]" << pos;
MonitorPicture *monitorPicture = new MonitorPicture(NULL, monitor, this); monitorPicture->setMonitorPosition(pos.x(), pos.y());
pictures.append(monitorPicture);
scene->addItem(monitorPicture);
monitorsWidth+=monitorPicture->rect().width();
monitorsHeight+=monitorPicture->rect().height();
}
ui.graphicsView->scale(200.0/(float)monitorsWidth,200.0/(float)monitorsHeight);
ui.graphicsView->setScene(scene);
} }
void MonitorPictureDialog::updateScene() { MonitorPictureDialog::MonitorPictureDialog(KScreen::ConfigPtr config, QWidget * parent, Qt::WindowFlags f) :
ui.graphicsView->scene()->update(); QDialog(parent,f)
{
updatingOk = false;
mConfig = config;
ui.setupUi(this);
} }
void MonitorPictureDialog::updateMonitorWidgets(QString primaryMonitor) {
int x0, y0; void MonitorPictureDialog::setScene(QList<MonitorWidget *> monitors)
x0 = y0 =0; {
Q_FOREACH(MonitorPicture * picture, pictures) { int monitorsWidth =0;
if( picture->monitorWidget->monitorInfo->name == primaryMonitor || primaryMonitor=="") { int monitorsHeight = 0;
x0 = picture->monitorWidget->ui.xPosSpinBox->value() + picture->pos().x(); QGraphicsScene *scene = new QGraphicsScene();
y0 = picture->monitorWidget->ui.yPosSpinBox->value() + picture->pos().y(); for (MonitorWidget *monitor : monitors)
break; {
MonitorPicture *monitorPicture = new MonitorPicture(nullptr, monitor, this);
pictures.append(monitorPicture);
scene->addItem(monitorPicture);
monitorsWidth += monitorPicture->rect().width();
monitorsHeight += monitorPicture->rect().height();
MonitorPictureProxy *proxy = new MonitorPictureProxy(this, monitorPicture);
proxy->connect(monitor->output.data(), SIGNAL(currentModeIdChanged()), SLOT(updateSize()));
proxy->connect(monitor->output.data(), SIGNAL(posChanged()), SLOT(updatePosition()));
} }
} // The blue rectangle is maximum size of virtual screen (framebuffer)
Q_FOREACH(MonitorPicture * picture, pictures) { scene->addRect(0, 0, mConfig->screen()->maxSize().width(), mConfig->screen()->maxSize().height(), QPen(Qt::blue, 20))->setOpacity(0.5);
int x = -x0 + picture->monitorWidget->ui.xPosSpinBox->value(); int minWidgetLength = qMin(ui.graphicsView->size().width(), ui.graphicsView->size().width()) / 1.5;
int y = -y0 + picture->monitorWidget->ui.yPosSpinBox->value(); int maxMonitorSize = qMax(monitorsWidth, monitorsHeight);
picture->monitorWidget->ui.xPosSpinBox->setValue(x + picture->pos().x()); ui.graphicsView->scale(minWidgetLength / (float) maxMonitorSize, minWidgetLength / (float) maxMonitorSize);
picture->monitorWidget->ui.yPosSpinBox->setValue(y + picture->pos().y()); ui.graphicsView->setScene(scene);
}
} }
void MonitorPictureDialog::updateScene()
{
ui.graphicsView->scene()->update();
}
void MonitorPictureDialog::updateMonitorWidgets(QString primaryMonitor)
MonitorPicture::MonitorPicture(QGraphicsItem * parent, MonitorWidget *monitorWidget, MonitorPictureDialog *monitorPictureDialog):QGraphicsRectItem(parent)
{ {
this->monitorWidget = monitorWidget; // This method update spin boxes of position.
this->monitorPictureDialog = monitorPictureDialog; // If position is changed when this method is running, position is changed until buffer overflow.
//QString modeName = monitorWidget->ui.resolutionCombo->currentText(); // updatingOk control that this method can not be run twice in the same position change.
//int currentSizeWidth = monitorWidget->monitorInfo->monitorModes[modeName]->width;
//int currentSizeHeight = monitorWidget->monitorInfo->monitorModes[modeName]->height; if(updatingOk)
MonitorMode *monitorModeInfo = monitorWidget->ui.resolutionCombo->currentData().value<MonitorMode*>(); return;
int currentSizeWidth = monitorModeInfo->width; updatingOk = true;
int currentSizeHeight = monitorModeInfo->height; int x0, y0;
int x = monitorWidget->ui.xPosSpinBox->value(); x0 = y0 = 0;
int y = monitorWidget->ui.yPosSpinBox->value();
setAcceptedMouseButtons(Qt::LeftButton); for (MonitorPicture *picture : pictures)
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges); {
setRect(x, y, currentSizeWidth, currentSizeHeight); if (picture->monitorWidget->output->name() == primaryMonitor
originX = x; || primaryMonitor == QStringLiteral(""))
originY = y; {
x0 = picture->originX + picture->pos().x();
y0 = picture->originY + picture->pos().y();
QSvgRenderer *renderer = new QSvgRenderer(QLatin1String(ICON_PATH "monitor.svg")); break;
svgItem = new QGraphicsSvgItem(); }
svgItem->setSharedRenderer(renderer); }
svgItem->setX(x);
svgItem->setY(y); if( primaryMonitor == QStringLiteral("") )
svgItem->setOpacity(0.7); {
svgItem->setParentItem(this); for(MonitorPicture *picture: pictures)
{
int x1 = picture->originX + picture->pos().x();
textItem = new QGraphicsTextItem(monitorWidget->monitorInfo->name, this); int y1 = picture->originY + picture->pos().y();
textItem->setDefaultTextColor(Qt::white); x0 = qMin(x0, x1);
textItem->setX(x); y0 = qMin(y0, y1);
textItem->setY(y); }
textItem->setParentItem(this); }
setPen(QPen(Qt::black, 20));
for (MonitorPicture *picture : pictures)
adjustNameSize(); {
int x = picture->originX + picture->pos().x() - x0;
int y = picture->originY + picture->pos().y() - y0;
if( x != picture->monitorWidget->ui.xPosSpinBox->value() )
picture->monitorWidget->ui.xPosSpinBox->setValue(x);
//else
// qDebug() << "x Iguales";
if( y != picture->monitorWidget->ui.yPosSpinBox->value() )
picture->monitorWidget->ui.yPosSpinBox->setValue(y);
//else
// qDebug() << "y Iguales";
//qDebug() << "[MonitorPictureDialog::updateMonitorWidgets]" << x << '=' << picture->monitorWidget->ui.xPosSpinBox->value() << ',' << y << '=' << picture->monitorWidget->ui.yPosSpinBox->value();
}
updatingOk = false;
} }
MonitorPicture::MonitorPicture(QGraphicsItem * parent,
MonitorWidget *monitorWidget,
MonitorPictureDialog *monitorPictureDialog) :
QGraphicsRectItem(parent)
{
this->monitorWidget = monitorWidget;
this->monitorPictureDialog = monitorPictureDialog;
QSize currentSize = sizeFromString(monitorWidget->ui.resolutionCombo->currentText());
if( monitorWidget->output->rotation() == KScreen::Output::Left || monitorWidget->output->rotation() == KScreen::Output::Right )
currentSize.transpose();
int x = monitorWidget->ui.xPosSpinBox->value();
int y = monitorWidget->ui.yPosSpinBox->value();
setAcceptedMouseButtons(Qt::LeftButton);
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemSendsGeometryChanges);
originX = x;
originY = y;
setRect(x, y, currentSize.width(), currentSize.height());
// setPen(QPen(Qt::black, 20));
// textItem = new QGraphicsTextItem(monitorWidget->output->name(), this);
// textItem->setX(x);
// textItem->setY(y);
// textItem->setParentItem(this);
QSvgRenderer *renderer = new QSvgRenderer(QLatin1String(ICON_PATH "monitor.svg"));
svgItem = new QGraphicsSvgItem();
svgItem->setSharedRenderer(renderer);
svgItem->setX(x);
svgItem->setY(y);
svgItem->setOpacity(0.7);
svgItem->setParentItem(this);
textItem = new QGraphicsTextItem(monitorWidget->output->name(), this);
textItem->setDefaultTextColor(Qt::white);
textItem->setX(x);
textItem->setY(y);
textItem->setParentItem(this);
setPen(QPen(Qt::black, 20));
adjustNameSize();
}
void MonitorPicture::adjustNameSize() { void MonitorPicture::adjustNameSize()
prepareGeometryChange(); {
qreal fontWidth = QFontMetrics(textItem->font()).width(monitorWidget->monitorInfo->name+" "); prepareGeometryChange();
textItem->setScale((qreal)this->rect().width()/fontWidth); qreal fontWidth = QFontMetrics(textItem->font()).width(monitorWidget->output->name() + QStringLiteral(" "));
QTransform transform; textItem->setScale((qreal) this->rect().width() / fontWidth);
qreal width = qAbs(this->rect().width()/svgItem->boundingRect().width()); QTransform transform;
qreal height = qAbs(this->rect().height()/svgItem->boundingRect().height()); qreal width = qAbs(this->rect().width()/svgItem->boundingRect().width());
transform.scale(width, height); qreal height = qAbs(this->rect().height()/svgItem->boundingRect().height());
svgItem->setTransform(transform); qDebug() << "Width x Height" << width << "x" << height;
transform.scale(width, height);
svgItem->setTransform(transform);
} }
void MonitorPicture::updateSize(QSize currentSize)
{
QRectF r = rect();
r.setSize(currentSize);
setRect(r);
adjustNameSize();
}
QVariant MonitorPicture::itemChange(GraphicsItemChange change, const QVariant & value) QVariant MonitorPicture::itemChange(GraphicsItemChange change, const QVariant & value)
{ {
//qDebug() << "[MonitorPicture::itemChange]: "; //qDebug() << "[MonitorPicture::itemChange]: ";
//if ( change == ItemPositionChange && scene()) { //if ( change == ItemPositionChange && scene()) {
// value is the new position. // value is the new position.
//QPointF newPos = value.toPointF(); //QPointF newPos = value.toPointF();
//qDebug() << "[MonitorPictureDialog::updateMonitorWidgets]: " << newPos.x() << "x" << newPos.y(); //qDebug() << "[MonitorPictureDialog::updateMonitorWidgets]: " << newPos.x() << "x" << newPos.y();
//} //}
return QGraphicsItem::itemChange(change, value); QVariant v = QGraphicsItem::itemChange(change, value);
//monitorPictureDialog->updateMonitorWidgets(QString());
return v;
} }
void MonitorPicture::setMonitorPosition(int x, int y) void MonitorPicture::setMonitorPosition(int x, int y)
{ {
setPos(x,y); setX( x - originX );
setY( y - originY );
} }
void MonitorPicture::mouseReleaseEvent(QGraphicsSceneMouseEvent * event) void MonitorPicture::mouseReleaseEvent(QGraphicsSceneMouseEvent * event)
{ {
QGraphicsRectItem::mouseReleaseEvent(event); QGraphicsRectItem::mouseReleaseEvent(event);
monitorPictureDialog->moveMonitorPictureToNearest(this); monitorPictureDialog->moveMonitorPictureToNearest(this);
monitorPictureDialog->updateMonitorWidgets(QString());
} }
////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
// Move picture to nearest picture procedure. // Move picture to nearest picture procedure.
// Read magnetic_attraction.html for more info about the algorithm used. // Read magnetic_attraction.html for more info about the algorithm used.
////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
struct Parameters { struct Parameters {
float t1, t2; float t1, t2;
QVector2D cutPoint; QVector2D cutPoint;
}; };
static Parameters segmentsCut(QVector2D p0, QVector2D p1, QVector2D s0, QVector2D s1) static Parameters segmentsCut(QVector2D p0, QVector2D p1, QVector2D s0, QVector2D s1)
{ {
Parameters result; Parameters result;
QVector2D v0 = p1 - p0; QVector2D v0 = p1 - p0;
QVector2D v1 = s1 - s0; QVector2D v1 = s1 - s0;
QVector2D P = s0 - p0; QVector2D P = s0 - p0;
float det = v0.y()*v1.x() - v0.x()*v1.y();
if( det == 0.0 ) { float det = v0.y() * v1.x() - v0.x() * v1.y();
result.t1 = result.t2 = -1.0; if (det == 0.0)
} result.t1 = result.t2 = -1.0;
result.t1 = 1/det * ( -v1.y()*P.x() + v1.x()*P.y() );
result.t2 = 1/det * ( -v0.y()*P.x() + v0.x()*P.y() ); result.t1 = 1 / det * (-v1.y() * P.x() + v1.x() * P.y());
result.cutPoint = v0*result.t1 + p0; result.t2 = 1 / det * (-v0.y() * P.x() + v0.x() * P.y());
return result; result.cutPoint = v0 * result.t1 + p0;
return result;
} }
static QVector2D computeCenter(MonitorPicture* monitorPicture) static QVector2D computeCenter(MonitorPicture* monitorPicture)
{ {
float x0 = monitorPicture->x() + monitorPicture->originX; float x0 = monitorPicture->x() + monitorPicture->originX;
float y0 = monitorPicture->y() + monitorPicture->originY; float y0 = monitorPicture->y() + monitorPicture->originY;
float x1 = x0 + monitorPicture->rect().width(); float x1 = x0 + monitorPicture->rect().width();
float y1 = y0 + monitorPicture->rect().height(); float y1 = y0 + monitorPicture->rect().height();
QVector2D p0(x0,y0); QVector2D p0(x0, y0);
QVector2D p1(x1,y1); QVector2D p1(x1, y1);
QVector2D center = p0 + (p1-p0)*0.5; QVector2D center = p0 + (p1 - p0) * 0.5;
return center; return center;
} }
struct Result_moveMonitorPictureToNearest struct Result_moveMonitorPictureToNearest
{ {
bool ok; bool ok;
QVector2D vector; QVector2D vector;
}; };
static Result_moveMonitorPictureToNearest compareTwoMonitors(MonitorPicture* monitorPicture1, MonitorPicture* monitorPicture2) static Result_moveMonitorPictureToNearest compareTwoMonitors(MonitorPicture* monitorPicture1,
MonitorPicture* monitorPicture2)
{ {
Result_moveMonitorPictureToNearest result; Result_moveMonitorPictureToNearest result;
QVector2D center1 = computeCenter(monitorPicture1); QVector2D center1 = computeCenter(monitorPicture1);
QVector2D center2 = computeCenter(monitorPicture2); QVector2D center2 = computeCenter(monitorPicture2);
float x0 = monitorPicture2->x() + monitorPicture2->originX; float x0 = monitorPicture2->x() + monitorPicture2->originX;
float y0 = monitorPicture2->y() + monitorPicture2->originY; float y0 = monitorPicture2->y() + monitorPicture2->originY;
float x1 = x0 + monitorPicture2->rect().width(); float x1 = x0 + monitorPicture2->rect().width();
float y1 = y0 + monitorPicture2->rect().height(); float y1 = y0 + monitorPicture2->rect().height();
QVector2D p0(x0,y0);
QVector2D p1(x1,y1); QVector2D p0(x0, y0);
QVector2D P1, P2; QVector2D p1(x1, y1);
float t1=-1.0, t2=-1.0; QVector2D P1, P2;
Parameters params = segmentsCut(center1, center2, QVector2D(x0,y0), QVector2D(x1,y0)); float t1 = -1.0, t2 = -1.0;
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) {
if(t1<0) {t1 = params.t1; P1 = params.cutPoint;} Parameters params = segmentsCut(center1, center2, QVector2D(x0, y0), QVector2D(x1, y0));
} if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t1 < 0)
params = segmentsCut(center1, center2, QVector2D(x0,y0), QVector2D(x0,y1)); {
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { t1 = params.t1;
if(t1<0) {t1 = params.t1; P1 = params.cutPoint;} P1 = params.cutPoint;
} }
params = segmentsCut(center1, center2, QVector2D(x1,y1), QVector2D(x1,y0));
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { params = segmentsCut(center1, center2, QVector2D(x0, y0), QVector2D(x0, y1));
if(t1<0) {t1 = params.t1; P1 = params.cutPoint;} if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t1 < 0)
} {
params = segmentsCut(center1, center2, QVector2D(x1,y1), QVector2D(x0,y1)); t1 = params.t1;
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { P1 = params.cutPoint;
if(t1<0) {t1 = params.t1; P1 = params.cutPoint;} }
}
x0 = monitorPicture1->x() + monitorPicture1->originX; params = segmentsCut(center1, center2, QVector2D(x1, y1), QVector2D(x1, y0));
y0 = monitorPicture1->y() + monitorPicture1->originY; if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t1 < 0)
x1 = x0 + monitorPicture1->rect().width(); {
y1 = y0 + monitorPicture1->rect().height(); t1 = params.t1;
p0 = QVector2D(x0,y0); P1 = params.cutPoint;
p1 = QVector2D(x1,y1); }
params = segmentsCut(center1, center2, QVector2D(x0,y0), QVector2D(x1,y0));
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { params = segmentsCut(center1, center2, QVector2D(x1, y1), QVector2D(x0, y1));
if(t2<0) {t2 = params.t1; P2 = params.cutPoint;} if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t1 < 0)
} {
params = segmentsCut(center1, center2, QVector2D(x0,y0), QVector2D(x0,y1)); t1 = params.t1;
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { P1 = params.cutPoint;
if(t2<0) {t2 = params.t1; P2 = params.cutPoint;} }
}
params = segmentsCut(center1, center2, QVector2D(x1,y1), QVector2D(x1,y0)); x0 = monitorPicture1->x() + monitorPicture1->originX;
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { y0 = monitorPicture1->y() + monitorPicture1->originY;
if(t2<0) {t2 = params.t1; P2 = params.cutPoint;} x1 = x0 + monitorPicture1->rect().width();
} y1 = y0 + monitorPicture1->rect().height();
params = segmentsCut(center1, center2, QVector2D(x1,y1), QVector2D(x0,y1)); p0 = QVector2D(x0, y0);
if(params.t1>=0.0 && params.t1<=1.0 && params.t2>=0.0 && params.t2<=1.0) { p1 = QVector2D(x1, y1);
if(t2<0) {t2 = params.t1; P2 = params.cutPoint;}
} params = segmentsCut(center1, center2, QVector2D(x0, y0), QVector2D(x1, y0));
if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t2 < 0)
if(t1>t2) { //Monitor outside {
result.vector = P1-P2; t2 = params.t1;
result.ok = false; P2 = params.cutPoint;
} else { }
result.ok = true;
} params = segmentsCut(center1, center2, QVector2D(x0, y0), QVector2D(x0, y1));
if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t2 < 0)
return result; {
t2 = params.t1;
P2 = params.cutPoint;
}
params = segmentsCut(center1, center2, QVector2D(x1, y1), QVector2D(x1, y0));
if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t2 < 0)
{
t2 = params.t1;
P2 = params.cutPoint;
}
params = segmentsCut(center1, center2, QVector2D(x1, y1), QVector2D(x0, y1));
if (params.t1 >= 0.0 && params.t1 <= 1.0 && params.t2 >= 0.0 && params.t2 <= 1.0 && t2 < 0)
{
t2 = params.t1;
P2 = params.cutPoint;
}
// Monitor outside
if (t1 > t2)
{
result.vector = P1 - P2;
result.ok = false;
} else
result.ok = true;
return result;
} }
void MonitorPictureDialog::moveMonitorPictureToNearest(MonitorPicture* monitorPicture) void MonitorPictureDialog::moveMonitorPictureToNearest(MonitorPicture* monitorPicture)
{ {
if(!ui.magneticCheckBox->isChecked()) if (!ui.magneticCheckBox->isChecked())
return; return;
QVector2D vector(0,0);
foreach(MonitorPicture* picture, pictures) { QVector2D vector(0, 0);
if(picture==monitorPicture) continue; for (MonitorPicture *picture : pictures)
Result_moveMonitorPictureToNearest result = compareTwoMonitors(monitorPicture, picture); {
if(result.ok) { if (picture == monitorPicture)
return; continue;
} else {
if(result.vector.length()<vector.length() || vector.length()==0.0) Result_moveMonitorPictureToNearest result = compareTwoMonitors(monitorPicture, picture);
vector = result.vector; if (result.ok)
return;
else if (result.vector.length() < vector.length() || vector.length() == 0.0)
vector = result.vector;
} }
}
int x = monitorPicture->x(); int x = monitorPicture->x();
int y = monitorPicture->y(); int y = monitorPicture->y();
monitorPicture->setX( x + vector.x() ); monitorPicture->setX(x + vector.x());
monitorPicture->setY( y + vector.y() ); monitorPicture->setY(y + vector.y());
} }

@ -16,53 +16,75 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef _MONITORPICTURE_H_ #ifndef _MONITORPICTURE_H_
#define _MONITORPICTURE_H_ #define _MONITORPICTURE_H_
#include <QGraphicsView> #include <QGraphicsView>
#include <QGraphicsRectItem> #include <QGraphicsRectItem>
#include <QGraphicsTextItem> #include <QGraphicsTextItem>
#include <QDialog>
#include <QGraphicsSvgItem>
#include <QSvgRenderer> #include <QSvgRenderer>
#include <QGraphicsSvgItem>
#include <QDialog>
#include "monitor.h" #include "monitor.h"
#include "ui_monitorpicture.h" #include "ui_monitorpicture.h"
#include "monitorwidget.h" #include "monitorwidget.h"
class MonitorPicture; class MonitorPicture;
class MonitorPictureDialog: public QDialog { class MonitorPictureDialog : public QDialog
Q_OBJECT {
Q_OBJECT
public: public:
MonitorPictureDialog(QWidget * parent = 0, Qt::WindowFlags f = 0); MonitorPictureDialog(KScreen::ConfigPtr config, QWidget * parent = 0, Qt::WindowFlags f = 0);
void setScene(QList<MonitorWidget*> monitors); void setScene(QList<MonitorWidget*> monitors);
void updateMonitorWidgets(QString primaryMonitor); void updateMonitorWidgets(QString primaryMonitor);
void moveMonitorPictureToNearest(MonitorPicture* monitorPicture); void moveMonitorPictureToNearest(MonitorPicture* monitorPicture);
void updateScene(); void updateScene();
private: private:
Ui::MonitorPictureDialog ui; Ui::MonitorPictureDialog ui;
QList<MonitorPicture*> pictures; QList<MonitorPicture*> pictures;
bool updatingOk;
KScreen::ConfigPtr mConfig;
}; };
class MonitorPicture : public QGraphicsRectItem
{
public:
MonitorPicture(QGraphicsItem *parent,
MonitorWidget *monitorWidget,
MonitorPictureDialog *monitorPictureDialog);
void setMonitorPosition(int x, int y);
void adjustNameSize();
class MonitorPicture: public QGraphicsRectItem { MonitorWidget *monitorWidget;
int originX, originY;
public: void updateSize(QSize size);
MonitorPicture(QGraphicsItem * parent, MonitorWidget *monitorWidget, MonitorPictureDialog *monitorPictureDialog);
void setMonitorPosition(int x, int y);
void adjustNameSize();
MonitorWidget *monitorWidget;
int originX, originY;
private: private:
QGraphicsTextItem *textItem; QGraphicsTextItem *textItem;
QGraphicsSvgItem *svgItem; QGraphicsSvgItem *svgItem;
MonitorPictureDialog *monitorPictureDialog; MonitorPictureDialog *monitorPictureDialog;
protected: protected:
QVariant itemChange(GraphicsItemChange change, const QVariant & value); QVariant itemChange(GraphicsItemChange change, const QVariant & value);
void mouseReleaseEvent(QGraphicsSceneMouseEvent * event); void mouseReleaseEvent(QGraphicsSceneMouseEvent * event);
};
class MonitorPictureProxy: public QObject
{
Q_OBJECT
public:
MonitorPictureProxy(QObject *parent, MonitorPicture *monitorPicture);
MonitorPicture *monitorPicture;
public slots:
void updateSize();
void updatePosition();
}; };

@ -24,58 +24,15 @@
<item> <item>
<widget class="QCheckBox" name="magneticCheckBox"> <widget class="QCheckBox" name="magneticCheckBox">
<property name="text"> <property name="text">
<string>Magnetic attraction</string> <string>Keep monitors attached</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>
<connections> <connections/>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>MonitorPictureDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>MonitorPictureDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui> </ui>

@ -17,281 +17,182 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#include "monitorsettingsdialog.h" #include "monitorsettingsdialog.h"
#include <QVBoxLayout>
#include <QFrame>
#include <QLabel>
#include <QComboBox>
#include <QProcess>
#include <QGroupBox>
#include <QMessageBox>
#include <QFile>
#include <QDir>
#include <QTimer>
#include <QProgressBar>
#include <QInputDialog>
#include <QDebug>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
#include "monitorwidget.h" #include "monitorwidget.h"
#include "timeoutdialog.h" #include "timeoutdialog.h"
#include "xrandr.h"
#include "monitorpicture.h" #include "monitorpicture.h"
#include "settingsdialog.h"
MonitorSettingsDialog::MonitorSettingsDialog(MonitorSettingsBackend* backend, LXQt::Settings *applicationSettings): #include <KScreen/Output>
QDialog(NULL, 0), #include <QJsonObject>
LVDS(NULL) { #include <QJsonArray>
timeoutDialog = NULL; #include <QSettings>
timer = NULL; #include <QJsonDocument>
this->applicationSettings = applicationSettings; #include <KScreen/EDID>
this->backend = backend; #include <QFile>
backend->setParent(this); #include <QDir>
setupUi(); #include <QFileInfo>
} #include <QMessageBox>
MonitorSettingsDialog::~MonitorSettingsDialog() { MonitorSettingsDialog::MonitorSettingsDialog() :
QDialog(nullptr, 0)
{
ui.setupUi(this);
KScreen::GetConfigOperation *operation = new KScreen::GetConfigOperation();
connect(operation, &KScreen::GetConfigOperation::finished, [this, operation] (KScreen::ConfigOperation *op) {
KScreen::GetConfigOperation *configOp = qobject_cast<KScreen::GetConfigOperation *>(op);
if (configOp)
{
mOldConfig = configOp->config()->clone();
loadConfiguration(configOp->config());
operation->deleteLater();
}
});
connect(ui.buttonBox, &QDialogButtonBox::clicked, [&] (QAbstractButton *button) {
if (ui.buttonBox->standardButton(button) == QDialogButtonBox::Apply)
applyConfiguration(false);
if (ui.buttonBox->standardButton(button) == QDialogButtonBox::Save)
{
applyConfiguration(true);
}
});
ui.settingsButton->hide(); // Hide settings button until daemon works OK.
connect(ui.settingsButton, SIGNAL(clicked()), this, SLOT(showSettingsDialog()));
}
MonitorSettingsDialog::~MonitorSettingsDialog()
{
} }
void MonitorSettingsDialog::loadConfiguration(KScreen::ConfigPtr config)
{
if (mConfig == config)
return;
void MonitorSettingsDialog::deleteTimeoutData() { mConfig = config;
timeoutDialog = NULL;
Q_FOREACH(MonitorInfo * monitorInfo, timeoutSettings) {
delete monitorInfo;
}
timeoutSettings.clear();
}
void MonitorSettingsDialog::onCancelSettings() { MonitorPictureDialog *monitorPicture = nullptr;
// restore the old settings KScreen::OutputList outputs = mConfig->outputs();
QList<MonitorSettings*> settings;
Q_FOREACH(MonitorInfo * monitorInfo, timeoutSettings) {
settings.append((MonitorSettings*)monitorInfo);
}
backend->setMonitorsSettings(settings);
deleteTimeoutData();
}
QList<MonitorSettings*> MonitorSettingsDialog::getMonitorsSettings() { int nMonitors = 0;
// Build list of monitor and their settings for (const KScreen::OutputPtr &output : outputs)
QList<MonitorSettings*> settings; {
Q_FOREACH(MonitorWidget * monitor, monitors) { if (output->isConnected())
MonitorSettings* s = monitor->getSettings(); nMonitors++;
settings.append(s);
if(ui.primaryCombo->currentText() == monitor->monitorInfo->name)
s->primaryOk = true;
}
if(ui.unify->isChecked()) {
Q_FOREACH(MonitorSettings * s, settings) {
s->position = MonitorSettings::None;
}
}
return settings;
}
void MonitorSettingsDialog::setMonitorsConfig() {
deleteTimeoutData();
timeoutSettings = backend->getMonitorsInfo();
// Show timeout dialog
timeoutDialog = new TimeoutDialog(this);
connect(timeoutDialog, SIGNAL(rejected()), this, SLOT(onCancelSettings()));
connect(timeoutDialog, SIGNAL(finished(int)), timeoutDialog, SLOT(deleteLater()));
// Build list of monitor and their settings
QList<MonitorSettings*> settings = getMonitorsSettings();
backend->setMonitorsSettings(settings);
Q_FOREACH(MonitorSettings * s, settings) {
delete s;
}
timeoutDialog->show();
}
// turn on both laptop LCD and the external monitor if (nMonitors > 1)
void MonitorSettingsDialog::onUseBoth() { {
if(monitors.length() == 0) monitorPicture = new MonitorPictureDialog(config, this);
return; ui.monitorList->addItem(tr("Set position"));
ui.unify->setChecked(true); ui.stackedWidget->addWidget(monitorPicture);
MonitorWidget* monitor = monitors[0]; break;
bool ok; }
QString mode;
for(int i = 0; i < monitor->monitorInfo->modes.length(); i++) {
mode = monitor->monitorInfo->modes[i];
ok = true;
Q_FOREACH(MonitorWidget * monitor2, monitors) {
ok = ok && monitor2->monitorInfo->modes.contains(mode);
} }
if(ok)
break;
}
qDebug() << "Mode selected" << mode << ok;
Q_FOREACH(MonitorWidget * monitor2, monitors) {
int index = monitor2->monitorInfo->modes.indexOf(mode) + 1;
if(monitor2->ui.resolutionCombo->count() > index)
monitor2->ui.resolutionCombo->setCurrentIndex(index);
else
monitor2->chooseMaxResolution();
monitor2->enableMonitor(true);
qDebug() << "Mode selected index" << index << "Mode" << monitor->ui.resolutionCombo->currentText();
}
setMonitorsConfig();
}
// external monitor only
void MonitorSettingsDialog::onExternalOnly() {
Q_FOREACH(MonitorWidget * monitor, monitors) {
monitor->chooseMaxResolution();
monitor->enableMonitor(monitor != LVDS);
}
setMonitorsConfig();
}
// laptop panel - LVDS only
void MonitorSettingsDialog::onLaptopOnly() {
Q_FOREACH(MonitorWidget * monitor, monitors) {
monitor->chooseMaxResolution();
monitor->enableMonitor(monitor == LVDS);
}
setMonitorsConfig();
}
void MonitorSettingsDialog::onExtended() {
ui.unify->setChecked(false);
int virtualWidth = 0;
Q_FOREACH(MonitorWidget * monitor, monitors) {
monitor->chooseMaxResolution();
monitor->enableMonitor(true);
monitor->disablePositionOption(false);
QString modeName = monitor->ui.resolutionCombo->currentText();
int modeWidth = monitor->monitorInfo->monitorModes[modeName]->width;
monitor->ui.xPosSpinBox->setValue(virtualWidth);
monitor->ui.yPosSpinBox->setValue(0);
virtualWidth+=modeWidth;
}
setMonitorsConfig();
}
void MonitorSettingsDialog::setupUi() { QList<MonitorWidget*> monitors;
ui.setupUi(this);
connect(ui.positionPushButton, SIGNAL(clicked()), SLOT(onPositionButtonClicked())); for (const KScreen::OutputPtr &output : outputs)
{
// Get monitors information if (output->isConnected())
QList<MonitorInfo*> monitorsInfo = backend->getMonitorsInfo(); {
MonitorWidget *monitor = new MonitorWidget(output, mConfig, this);
// Search if LVSD monitor is connected ui.monitorList->addItem(output->name());
hardwareIdentifier = ""; ui.stackedWidget->addWidget(monitor);
Q_FOREACH(MonitorInfo * monitorInfo, monitorsInfo) { monitors.append(monitor);
hardwareIdentifier+=monitorInfo->edid; }
if(! LVDS && (monitorInfo->name.startsWith("LVDS") || monitorInfo->name.startsWith("PANEL"))) {
MonitorInfo::LVDS_Ok = true;
break;
}
}
int i = 0;
connect(ui.unify, SIGNAL(toggled(bool)), this, SLOT(disablePositionOption(bool)));
Q_FOREACH(MonitorInfo * monitorInfo, monitorsInfo) {
ui.primaryCombo->addItem(monitorInfo->name);
if(monitorInfo->primaryOk)
ui.primaryCombo->setCurrentIndex(ui.primaryCombo->findText(monitorInfo->name));
qDebug() << "Monitor" << monitorInfo->name;
MonitorWidget* monitor = new MonitorWidget(monitorInfo, monitorsInfo, this);
QString title = QString("Monitor %1: %2 (%3) %4")
.arg(i + 1)
.arg(monitor->monitorInfo->name)
.arg(monitor->monitorInfo->humanReadableName())
.arg(monitor->monitorInfo->vendor);
qDebug() << "Monitor" << title;
monitor->setTitle(title);
connect(ui.unify, SIGNAL(toggled(bool)), monitor, SLOT(disablePositionOption(bool)));
monitors.append(monitor);
if(! LVDS && (monitorInfo->name.startsWith("LVDS") || monitorInfo->name.startsWith("PANEL"))) {
LVDS = monitor;
}
ui.stackedWidget->addWidget(monitor);
ui.monitorList->addItem(monitor->monitorInfo->name);
++i;
}
ui.monitorList->setCurrentRow(0);
// set the max width of the list widget to the maximal width of its rows + the width of a vertical scrollbar.
ui.monitorList->setMaximumWidth(ui.monitorList->sizeHintForColumn(0) + style()->pixelMetric(QStyle::PM_ScrollBarExtent) + 40);
// are the monitors unified?
if(monitorsInfo.length() > 1)
ui.unify->setChecked(backend->isUnified(monitorsInfo));
else {// disable the option if we only have one monitor
ui.unify->setEnabled(false);
ui.positionPushButton->setEnabled(false);
}
// If this is a laptop and there is an external monitor, offer quick options
if(monitors.length() == 2) {
// If there is only two monitors,offer quick options
if(! LVDS) {
LVDS = monitors[0];
} }
}
adjustSize(); if (monitorPicture)
} monitorPicture->setScene(monitors);
void MonitorSettingsDialog::accept() { ui.monitorList->setCurrentRow(0);
setMonitorsConfig(); adjustSize();
QDialog::accept();
} }
void MonitorSettingsDialog::disablePositionOption(bool disable) { void MonitorSettingsDialog::applyConfiguration(bool saveConfigOk)
ui.positionPushButton->setEnabled(!disable); {
if (mConfig && KScreen::Config::canBeApplied(mConfig))
{
KScreen::SetConfigOperation(mConfig).exec();
TimeoutDialog mTimeoutDialog;
if (mTimeoutDialog.exec() == QDialog::Rejected)
KScreen::SetConfigOperation(mOldConfig).exec();
else
{
mOldConfig = mConfig->clone();
if (saveConfigOk)
saveConfiguration(mConfig);
}
}
} }
void MonitorSettingsDialog::onPositionButtonClicked() { void MonitorSettingsDialog::accept()
MonitorPictureDialog *dialog = new MonitorPictureDialog(this); {
dialog->setScene(monitors); //applyConfiguration(true);
dialog->exec(); QDialog::accept();
dialog->updateMonitorWidgets(ui.primaryCombo->currentText());
delete dialog;
} }
void MonitorSettingsDialog::applySettings() { void MonitorSettingsDialog::reject()
setMonitorsConfig(); {
QDialog::reject();
} }
void MonitorSettingsDialog::saveSettings() { void MonitorSettingsDialog::saveConfiguration(KScreen::ConfigPtr config)
// Save config and exit {
QMessageBox msgBox; QJsonObject json;
msgBox.setText(tr("Do you want to save changes?")); QJsonArray jsonArray;
msgBox.setInformativeText(tr("Please, check the settings before saving.")); KScreen::OutputList outputs = config->outputs();
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Cancel); for (const KScreen::OutputPtr &output : outputs)
msgBox.setDefaultButton(QMessageBox::Cancel); {
int ret = msgBox.exec(); QJsonObject monitorSettings;
if( ret == QMessageBox::Cancel ) monitorSettings["name"] = output->name();
return; KScreen::Edid* edid = output->edid();
bool ok; if (edid && edid->isValid())
QString configName = QInputDialog::getText(this, tr("Name"), monitorSettings["hash"] = edid->hash();
tr("Name:"), QLineEdit::Normal, monitorSettings["connected"] = output->isConnected();
tr("Actual"), &ok); if ( output->isConnected() )
if (!ok || configName.isEmpty()) {
return; monitorSettings["enabled"] = output->isEnabled();
QList<MonitorSettings*> settings = getMonitorsSettings(); monitorSettings["primary"] = output->isPrimary();
QString cmd = backend->getCommand(settings); monitorSettings["xPos"] = output->pos().x();
Q_FOREACH(MonitorSettings * s, settings) { monitorSettings["yPos"] = output->pos().y();
delete s; monitorSettings["currentMode"] = output->currentMode()->id();
monitorSettings["rotation"] = output->rotation();
}
jsonArray.append(monitorSettings);
} }
json["outputs"] = jsonArray;
QSettings settings("LXQt", "lxqt-config-monitor");
settings.setValue("currentConfig", QVariant(QJsonDocument(json).toJson()));
QString desktop = QString("[Desktop Entry]\n" QString desktop = QString("[Desktop Entry]\n"
"Type=Application\n" "Type=Application\n"
"Name=LXQt-config-monitor autostart\n" "Name=LXQt-config-monitor autostart\n"
"Comment=Autostart monitor settings for LXQt-config-monitor\n" "Comment=Autostart monitor settings for LXQt-config-monitor\n"
"Exec=%1\n" "Exec=%1\n"
"OnlyShowIn=LXQt\n").arg(cmd); "OnlyShowIn=LXQt\n").arg("lxqt-config-monitor -l");
// Check if ~/.config/autostart/ exists
ok = true; // Check autostart path: $XDG_CONFIG_HOME or ~/.config/autostart
QFileInfo fileInfo(QDir::homePath() + "/.config/autostart/"); QString autostartPath;
if( ! fileInfo.exists() ) bool ok = true;
ok = QDir::root().mkpath(QDir::homePath() + "/.config/autostart/"); if(qEnvironmentVariableIsSet("XDG_CONFIG_HOME"))
QFile file(QDir::homePath() + "/.config/autostart/lxqt-config-monitor-autostart.desktop"); autostartPath = QString(qgetenv("XDG_CONFIG_HOME"));
else
{
autostartPath = QDir::homePath() + "/.config/autostart/";
// Check if ~/.config/autostart/ exists
QFileInfo fileInfo(autostartPath);
if( ! fileInfo.exists() )
ok = QDir::root().mkpath(autostartPath);
}
QFile file(autostartPath + "/lxqt-config-monitor-autostart.desktop");
if(ok) if(ok)
ok = file.open(QIODevice::WriteOnly | QIODevice::Text); ok = file.open(QIODevice::WriteOnly | QIODevice::Text);
if(!ok) { if(!ok) {
@ -303,29 +204,17 @@ void MonitorSettingsDialog::saveSettings() {
out.flush(); out.flush();
file.close(); file.close();
// Save config in applicationSettings
applicationSettings->beginGroup("configMonitor");
QJsonArray savedConfigs = QJsonDocument::fromJson(applicationSettings->value("saved").toByteArray()).array();
QJsonObject monitorConfig;
monitorConfig["hardwareIdentifier"] = hardwareIdentifier;
monitorConfig["command"] = cmd;
monitorConfig["name"] = configName;
savedConfigs.append(monitorConfig);
applicationSettings->setValue("saved", QVariant(QJsonDocument(savedConfigs).toJson()));
applicationSettings->endGroup();
emit(settingsSaved());
} }
#include <QDialogButtonBox> void MonitorSettingsDialog::showSettingsDialog()
void MonitorSettingsDialog::processClickedFromDialog(QDialogButtonBox::StandardButton button)
{ {
qDebug() << "[MonitorSettingsDialog::processClickedFromDialog]"; QByteArray configName = qgetenv("LXQT_SESSION_CONFIG");
if(button == QDialogButtonBox::Apply)
setMonitorsConfig();
}
QString MonitorSettingsDialog::getHardwareIdentifier() if (configName.isEmpty())
{ configName = "MonitorSettings";
return hardwareIdentifier;
LXQt::Settings settings(configName);
SettingsDialog settingsDialog(tr("Advanced settings"), &settings);
settingsDialog.exec();
} }

@ -17,70 +17,44 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef MONITORSETTINGSDIALOG_H #ifndef MONITORSETTINGSDIALOG_H
#define MONITORSETTINGSDIALOG_H #define MONITORSETTINGSDIALOG_H
#include <QDialog> #include "ui_monitorsettingsdialog.h"
#include <QDialogButtonBox> #include "timeoutdialog.h"
#include <LXQt/Settings>
#include "ui_mainwindow.h"
#include "monitor.h"
#include "monitorwidget.h"
class TimeoutDialog; #include <QDialog>
class QTimer; #include <QTimer>
#include <KScreen/GetConfigOperation>
#include <KScreen/SetConfigOperation>
class MonitorSettingsDialog: public QDialog { class MonitorSettingsDialog : public QDialog
Q_OBJECT {
Q_OBJECT
public: public:
MonitorSettingsDialog(MonitorSettingsBackend* backend, LXQt::Settings *applicationSettings); MonitorSettingsDialog();
virtual ~MonitorSettingsDialog(); virtual ~MonitorSettingsDialog();
virtual void accept();
QString getHardwareIdentifier();
public Q_SLOTS:
// quick options
void onUseBoth();
void onExternalOnly();
void onLaptopOnly();
void onExtended();
// applying and saving settings
void applySettings();
void saveSettings();
// Apply settings from ConfigDialog
void processClickedFromDialog(QDialogButtonBox::StandardButton button);
signals: virtual void accept();
void settingsSaved(); virtual void reject();
private: private:
void setMonitorsConfig(); void applyConfiguration(bool saveConfigOk);
void setupUi(); void cancelConfiguration();
QList<MonitorSettings*> getMonitorsSettings();
void deleteTimeoutData(); // Used to delete data from TimeoutDialog
private Q_SLOTS: private Q_SLOTS:
// Timeout dialog signals void loadConfiguration(KScreen::ConfigPtr config);
void onCancelSettings(); void showSettingsDialog();
void onPositionButtonClicked();
void disablePositionOption(bool disable);
private: private:
Ui::MonitorSettingsDialog ui; void saveConfiguration(KScreen::ConfigPtr config);
QList<MonitorWidget*> monitors;
MonitorWidget* LVDS; Ui::MonitorSettingsDialog ui;
MonitorSettingsBackend* backend;
// TimeoutDialog data // Configutarions
TimeoutDialog* timeoutDialog; KScreen::ConfigPtr mOldConfig;
QTimer* timer; KScreen::ConfigPtr mConfig;
QList<MonitorInfo*> timeoutSettings;
LXQt::Settings *applicationSettings;
QString hardwareIdentifier;
}; };
#endif // MONITORSETTINGSDIALOG_H #endif // MONITORSETTINGSDIALOG_H

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MonitorSettingsDialog</class>
<widget class="QDialog" name="MonitorSettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>510</width>
<height>131</height>
</rect>
</property>
<property name="windowTitle">
<string>Monitor Settings</string>
</property>
<property name="windowIcon">
<iconset theme="preferences-desktop-display">
<normaloff/>
</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="childrenCollapsible">
<bool>false</bool>
</property>
<widget class="QListWidget" name="monitorList">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="resizeMode">
<enum>QListView::Adjust</enum>
</property>
</widget>
<widget class="QStackedWidget" name="stackedWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QToolButton" name="settingsButton">
<property name="text">
<string>Settings</string>
</property>
<property name="icon">
<iconset theme="preferences-system"/>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
<property name="autoRaise">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Save</set>
</property>
<property name="centerButtons">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>monitorList</sender>
<signal>currentRowChanged(int)</signal>
<receiver>stackedWidget</receiver>
<slot>setCurrentIndex(int)</slot>
<hints>
<hint type="sourcelabel">
<x>126</x>
<y>181</y>
</hint>
<hint type="destinationlabel">
<x>20</x>
<y>20</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>MonitorSettingsDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>338</x>
<y>439</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>257</y>
</hint>
</hints>
</connection>
</connections>
</ui>

@ -19,130 +19,329 @@
#include "monitorwidget.h" #include "monitorwidget.h"
#include "monitor.h" #include "monitor.h"
#include <QDebug>
#include <QComboBox>
MonitorWidget::MonitorWidget(MonitorInfo* monitor, const QList<MonitorInfo*> monitorsInfo, QWidget* parent): #include <QStringBuilder>
QGroupBox(parent) { #include <QDialogButtonBox>
ui.enabled = NULL; #include <KScreen/EDID>
monitorInfo = monitor;
monitor->setParent(this); // take the ownership
ui.setupUi(this); QString modeToString(KScreen::ModePtr mode)
{
if(monitorsInfo.length() == 1) { // mode->name() can be anything, not just widthxheight. eg if added with cvt.
disablePositionOption(true); return QString("%1x%2").arg(mode->size().width()).arg(mode->size().height());
}
// turn off screen is not allowed since there should be at least one monitor available.
ui.enabled->setEnabled(false); KScreen::OutputPtr getOutputById(int id, KScreen::OutputList outputs)
} {
for (const KScreen::OutputPtr &output : outputs)
ui.xPosSpinBox->setValue(monitor->xPos); if (output->id() == id)
ui.yPosSpinBox->setValue(monitor->yPos); return output;
if(monitor->enabledOk) return KScreen::OutputPtr(nullptr);
ui.enabled->setChecked(true); }
connect(ui.resolutionCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onResolutionChanged(int))); KScreen::ModePtr getModeById(QString id, KScreen::ModeList modes)
ui.resolutionCombo->addItem(tr("Auto")); {
Q_FOREACH(QString _mode_line, monitor->modes) { for (const KScreen::ModePtr &mode : modes)
QVariant monitorModeInfo = QVariant::fromValue(monitor->monitorModes[_mode_line]); if (mode->id() == id)
ui.resolutionCombo->addItem(_mode_line, monitorModeInfo); return mode;
}
return KScreen::ModePtr(NULL);
}
if(!monitor->currentMode.isEmpty())
ui.resolutionCombo->setCurrentIndex(ui.resolutionCombo->findText(monitor->currentMode)); static bool sizeBiggerThan(const KScreen::ModePtr &modeA, const KScreen::ModePtr &modeB)
else {
ui.resolutionCombo->setCurrentIndex(0); QSize sizeA = modeA->size();
if(!monitor->currentRate.isEmpty()) QSize sizeB = modeB->size();
ui.rateCombo->setCurrentIndex(ui.rateCombo->findText(monitor->currentRate)); return sizeA.width() * sizeA.height() > sizeB.width() * sizeB.height();
else }
ui.rateCombo->setCurrentIndex(0);
int brightness; MonitorWidget::MonitorWidget(KScreen::OutputPtr output, KScreen::ConfigPtr config, QWidget* parent) :
if( !monitorInfo->brightness.isEmpty() ) QGroupBox(parent)
brightness = monitorInfo->brightness.toFloat()*100; {
else this->output = output;
brightness = 100; this->config = config;
ui.brightnessSlider->setValue(brightness);
ui.setupUi(this);
// Set gamma values
ui.redSpinBox->setSingleStep(0.01); ui.enabledCheckbox->setChecked(output->isEnabled());
ui.greenSpinBox->setSingleStep(0.01);
ui.blueSpinBox->setSingleStep(0.01); QList <KScreen::ModePtr> modeList = output->modes().values();
if(!monitor->gamma.isEmpty()) {
QStringList gammaValues = monitor->gamma.split(":"); // Remove duplicate sizes
ui.redSpinBox->setValue(gammaValues[0].toFloat()); QMap<QString, KScreen::ModePtr> noDuplicateModes;
ui.greenSpinBox->setValue(gammaValues[1].toFloat()); foreach(const KScreen::ModePtr &mode, modeList)
ui.blueSpinBox->setValue(gammaValues[2].toFloat()); {
} if( noDuplicateModes.keys().contains(modeToString(mode)) )
{
//Set backlight values KScreen::ModePtr actual = noDuplicateModes[modeToString(mode)];
if( !monitor->backlight.isEmpty() ) { bool isActualPreferred = output->preferredModes().contains(actual->id());
ui.backlightSlider->setMinimum(monitor->backlightMin.toInt()); bool isModePreferred = output->preferredModes().contains(mode->id());
ui.backlightSlider->setMaximum(monitor->backlightMax.toInt()); if( ( mode->refreshRate() > actual->refreshRate() && !isActualPreferred ) || isModePreferred )
ui.backlightSlider->setSingleStep(1); noDuplicateModes[modeToString(mode)] = mode;
ui.backlightSlider->setValue(monitor->backlight.toInt()); }
} else { else
ui.backlightSlider->setEnabled(false); noDuplicateModes[modeToString(mode)] = mode;
ui.backlightLabel->setEnabled(false);
}
}
void MonitorWidget::onResolutionChanged(int index) {
QComboBox* combo =ui.resolutionCombo;
QComboBox* rateCombo = ui.rateCombo;
QString mode = combo->currentText();
rateCombo->clear();
rateCombo->addItem(tr("Auto"));
if( monitorInfo->monitorModes.contains(mode)) {
QStringList mode_lines = combo->currentData().value<MonitorMode*>()->modeLines;
//QStringList mode_lines = monitorInfo->monitorModes[mode]->modeLines;
Q_FOREACH(QString rate, mode_lines) {
rateCombo->addItem(rate);
} }
rateCombo->setCurrentIndex(0);
} // Sort modes by size
} modeList = noDuplicateModes.values();
qSort(modeList.begin(), modeList.end(), sizeBiggerThan);
void MonitorWidget::disablePositionOption(bool disable) { // Add each mode to the list
bool enable = !disable; foreach (const KScreen::ModePtr &mode, modeList)
ui.xPosSpinBox->setEnabled(enable); {
ui.yPosSpinBox->setEnabled(enable); ui.resolutionCombo->addItem(modeToString(mode), mode->id());
ui.xPosLabel->setEnabled(enable); if(output->preferredModes().contains(mode->id()))
ui.yPosLabel->setEnabled(enable); {
ui.positionLabel->setEnabled(enable); // Make bold preferredModes
} QFont font = ui.resolutionCombo->font();
font.setBold(true);
MonitorSettings* MonitorWidget::getSettings() { ui.resolutionCombo->setItemData(ui.resolutionCombo->count()-1, font, Qt::FontRole);
MonitorSettings* s = new MonitorSettings(); }
s->name = monitorInfo->name; }
s->enabledOk = ui.enabled->isChecked(); connect(ui.resolutionCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onResolutionChanged(int)));
s->currentMode = ui.resolutionCombo->currentText();
s->currentRate = ui.rateCombo->currentText(); // Select actual mode in list
if( ! ui.xPosSpinBox->isEnabled() ) { // If no unify monitor is selected, then position is disabled. if (output->currentMode())
s->position = MonitorSettings::None; {
} else { // Set the current mode in dropdown
s->position = MonitorSettings::Manual; int idx = ui.resolutionCombo->findData(output->currentMode()->id());
} if (idx < 0)
s->xPos=ui.xPosSpinBox->value(); {
s->yPos=ui.yPosSpinBox->value(); // Select mode with same size
s->brightness = QString("%1").arg((float)(ui.brightnessSlider->value())/100.0); foreach (const KScreen::ModePtr &mode, modeList)
s->gamma = QString("%1:%2:%3").arg(ui.redSpinBox->value()).arg(ui.greenSpinBox->value()).arg(ui.blueSpinBox->value()); {
if(ui.backlightSlider->isEnabled()) { if( mode->size() == output->currentMode()->size() )
s->backlight = QString("%1").arg(ui.backlightSlider->value()); idx = ui.resolutionCombo->findData(output->currentMode()->id());
s->backlightMax = QString("%1").arg(ui.backlightSlider->maximum()); }
s->backlightMin = QString("%1").arg(ui.backlightSlider->minimum()); }
} if(idx < 0)
return s; idx = ui.resolutionCombo->findData(output->preferredMode()->id());
} if (idx >= 0)
ui.resolutionCombo->setCurrentIndex(idx);
void MonitorWidget::chooseMaxResolution() { }
if(ui.resolutionCombo->count() > 1) updateRefreshRates();
ui.resolutionCombo->setCurrentIndex(1);
}
// Update EDID information
void MonitorWidget::enableMonitor(bool enable) { // KScreen doesn't make much public but that's ok...
ui.enabled->setChecked(enable); KScreen::Edid* edid = output->edid();
if (edid && edid->isValid())
{
ui.outputInfoLabel->setText(
tr("Name: %1\n").arg(edid->name()) %
tr("Vendor: %1\n").arg(edid->vendor()) %
tr("Serial: %1\n").arg(edid->serial()) %
tr("Display size: %1cm x %2cm\n").arg(edid->width()).arg(edid->height()) %
tr("Serial number: %1\n").arg(edid->serial()) %
tr("EISA device ID: %1\n").arg(edid->eisaId())
);
}
if (config->connectedOutputs().count() == 1)
{
setOnlyMonitor(true);
// There isn't always a primary output. Gross.
output->setPrimary(true);
}
else
{
for (const KScreen::OutputPtr &other : config->connectedOutputs())
{
// We can't clone ourselves, or an output that already clones another
if (other == output)
continue;
ui.clonesCombo->addItem(other->name(), other->id());
ui.relativeScreensCombo->addItem(other->name(), other->id());
}
connect(ui.clonesCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onCloneChanged(int)));
}
ui.xPosSpinBox->setValue(output->pos().x());
ui.yPosSpinBox->setValue(output->pos().y());
// Behavior chooser
if (output->isPrimary())
ui.behaviorCombo->setCurrentIndex(PrimaryDisplay);
else if (!output->clone())
{
// Is this right?
ui.behaviorCombo->setCurrentIndex(CloneDisplay);
int idx = ui.resolutionCombo->findData(output->clone()->id());
ui.clonesCombo->setCurrentIndex(idx);
}
else
ui.behaviorCombo->setCurrentIndex(ExtendDisplay);
// Insert orientations
ui.orientationCombo->addItem(tr("None"), KScreen::Output::None);
ui.orientationCombo->addItem(tr("Left"), KScreen::Output::Left);
ui.orientationCombo->addItem(tr("Right"), KScreen::Output::Right);
ui.orientationCombo->addItem(tr("Inverted"), KScreen::Output::Inverted);
switch(output->rotation())
{
case KScreen::Output::None:
ui.orientationCombo->setCurrentIndex(0);
break;
case KScreen::Output::Left:
ui.orientationCombo->setCurrentIndex(1);
break;
case KScreen::Output::Right:
ui.orientationCombo->setCurrentIndex(2);
break;
case KScreen::Output::Inverted:
ui.orientationCombo->setCurrentIndex(3);
break;
}
connect(ui.enabledCheckbox, SIGNAL(toggled(bool)), this, SLOT(onEnabledChanged(bool)));
connect(ui.behaviorCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onBehaviorChanged(int)));
connect(ui.positioningCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onPositioningChanged(int)));
connect(ui.xPosSpinBox, SIGNAL(valueChanged(int)), this, SLOT(onPositionChanged(int)));
connect(ui.yPosSpinBox, SIGNAL(valueChanged(int)), this, SLOT(onPositionChanged(int)));
connect(ui.orientationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onOrientationChanged(int)));
// Force update behavior visibility
onBehaviorChanged(ui.behaviorCombo->currentIndex());
}
MonitorWidget::~MonitorWidget()
{
}
void MonitorWidget::onEnabledChanged(bool enabled)
{
output->setEnabled(enabled);
// If we're enabling a disabled output for the first time
if (enabled && !output->currentMode())
{
// order here matters
onResolutionChanged(ui.resolutionCombo->currentIndex());
onOrientationChanged(ui.orientationCombo->currentIndex());
onPositioningChanged(ui.positioningCombo->currentIndex());
onBehaviorChanged(ui.behaviorCombo->currentIndex());
}
}
void MonitorWidget::onOrientationChanged(int idx)
{
output->setRotation((KScreen::Output::Rotation) ui.orientationCombo->currentData().toInt(0));
}
void MonitorWidget::onBehaviorChanged(int idx)
{
// Behavior should match the index of the selected element
ui.positioningCombo->setVisible(idx == ExtendDisplay);
ui.clonesCombo->setVisible(idx == CloneDisplay);
ui.relativeScreensCombo->setVisible(idx == ExtendDisplay);
ui.xPosSpinBox->setVisible(idx == ExtendDisplay);
ui.yPosSpinBox->setVisible(idx == ExtendDisplay);
ui.relativeScreensCombo->setEnabled(true);
if(idx == CloneDisplay)
onCloneChanged(ui.clonesCombo->currentIndex());
output->setPrimary(idx == PrimaryDisplay);
}
void MonitorWidget::onCloneChanged(int idx)
{
KScreen::OutputPtr other = getOutputById(ui.clonesCombo->currentData().toInt(),
config->outputs());
output->setPos( other->pos() );
}
void MonitorWidget::onPositioningChanged(int idx)
{
// Update the x/y spinboxes with the correct values
KScreen::OutputPtr other = getOutputById(ui.relativeScreensCombo->currentData().toInt(),
config->outputs());
// TODO: Figure out what to do here
if (!other->currentMode() || !output->currentMode())
return;
QSize otherSize = other->currentMode()->size();
QSize thisSize = output->currentMode()->size();
int x = other->pos().x();
int y = other->pos().y();
switch (idx) {
case RightOf:
x += otherSize.width();
break;
case LeftOf:
x += thisSize.width();
break;
case Above:
y += otherSize.height();
break;
case Below:
y += thisSize.height();
break;
case Manually:
default:
break;
}
ui.xPosSpinBox->setValue(x);
ui.yPosSpinBox->setValue(y);
// Disable the other screens combo box if we don't need it
ui.relativeScreensCombo->setEnabled(idx && idx != Manually);
}
void MonitorWidget::onPositionChanged(int value)
{
output->setPos(QPoint(ui.xPosSpinBox->value(), ui.yPosSpinBox->value()));
}
void MonitorWidget::onResolutionChanged(int index)
{
output->setCurrentModeId(ui.resolutionCombo->currentData().toString());
updateRefreshRates();
}
void MonitorWidget::onRateChanged(int index)
{
output->setCurrentModeId(ui.rateCombo->currentData().toString());
}
void MonitorWidget::updateRefreshRates()
{
disconnect(ui.rateCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onRateChanged(int)));
ui.rateCombo->clear();
if (output->modes().size() < 0)
return;
KScreen::ModePtr selectedMode = output->currentMode();
if (selectedMode)
{
for (const KScreen::ModePtr &mode : output->modes())
if (mode->size() == selectedMode->size())
ui.rateCombo->addItem(tr("%1 Hz").arg(mode->refreshRate()), mode->id());
int idx = ui.rateCombo->findData(selectedMode->id());
if (idx >= 0)
ui.rateCombo->setCurrentIndex(idx);
}
connect(ui.rateCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(onRateChanged(int)));
}
void MonitorWidget::setOnlyMonitor(bool isOnlyMonitor)
{
ui.enabledCheckbox->setEnabled(!isOnlyMonitor);
ui.behaviorCombo->setEnabled(!isOnlyMonitor);
ui.xPosSpinBox->setVisible(!isOnlyMonitor);
ui.yPosSpinBox->setVisible(!isOnlyMonitor);
ui.relativeScreensCombo->setVisible(!isOnlyMonitor);
ui.clonesCombo->setVisible(!isOnlyMonitor);
} }

@ -17,37 +17,59 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef _MONITORWIDGET_H_ #ifndef _MONITORWIDGET_H_
#define _MONITORWIDGET_H_ #define _MONITORWIDGET_H_
#include "ui_monitorwidget.h"
#include <QGroupBox> #include <QGroupBox>
#include <QStringList> #include <QStringList>
#include <QHash> #include <QHash>
#include <QList> #include <QList>
#include "ui_monitorwidget.h" #include <KScreen/Config>
#include <KScreen/Output>
class MonitorInfo; #define PrimaryDisplay 0
class MonitorSettings; #define ExtendDisplay 1
#define CloneDisplay 2
// Monitor info #define RightOf 0
class MonitorWidget : public QGroupBox { #define LeftOf 1
#define Above 2
#define Below 3
#define Manually 4
class MonitorWidget : public QGroupBox
{
Q_OBJECT Q_OBJECT
friend class MonitorPicture;
friend class MonitorPictureDialog;
public: public:
MonitorWidget(MonitorInfo* monitor, const QList< MonitorInfo* > monitorsInfo, QWidget* parent = 0); MonitorWidget(KScreen::OutputPtr output, KScreen::ConfigPtr config, QWidget* parent = 0);
MonitorSettings* getSettings(); ~MonitorWidget();
void chooseMaxResolution();
void enableMonitor(bool enable);
MonitorInfo* monitorInfo; void updateRefreshRates();
KScreen::OutputPtr output;
KScreen::ConfigPtr config;
Ui::MonitorWidget ui;
public Q_SLOTS: public Q_SLOTS:
void disablePositionOption(bool disabled); void setOnlyMonitor(bool isOnlyMonitor);
private Q_SLOTS: private Q_SLOTS:
void onResolutionChanged(int); void onEnabledChanged(bool);
void onBehaviorChanged(int);
void onPositioningChanged(int);
void onPositionChanged(int);
void onResolutionChanged(int);
void onRateChanged(int);
void onOrientationChanged(int);
void onCloneChanged(int);
private:
Ui::MonitorWidget ui;
}; };
#endif // _MONITORWIDGET_H_ #endif // _MONITORWIDGET_H_

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save