master #7

Merged
asmeron merged 9 commits from YanTheKaller/ubl-settings-usergroups:master into master 2 years ago

4
.gitignore vendored

@ -6,4 +6,6 @@ compile/
*# *#
terminal-commands/ terminal-commands/
source/ubl-cmake.h source/ubl-cmake.h
vgcore* vgcore*
.install.sh
ubl-settings-generator

@ -8,11 +8,11 @@ MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH))
CMAKE_COMMAND = cmake CMAKE_COMMAND = cmake
CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source
CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile
DEPENDS = /usr/bin/cmake DEPENDS = /bin/cmake
PREFIX ?= /usr/local PREFIX ?= /usr/local
PKGNAME = $(MAKEFILE_DIR) PKGNAME = $(MAKEFILE_DIR)
FILE_VER = source/${PKGNAME}.h FILE_VER = source/${PKGNAME}.h
PKGIDENT = $(subst /,-,$(subst /usr,,${PREFIX})) PKGIDENT=$(subst /,-,${PREFIX})
default_target: all default_target: all
@ -24,6 +24,11 @@ init:
@echo "Initialize ..."; \ @echo "Initialize ..."; \
if [ -d ".git" ]; then \ if [ -d ".git" ]; then \
LATEST_TAG=$$(git describe --abbrev=0 --tags | sed 's/^v//'); \ LATEST_TAG=$$(git describe --abbrev=0 --tags | sed 's/^v//'); \
if [ -z "$${LATEST_TAG}" ]; \
then \
LATEST_TAG=$$"0.0"; \
echo "$${LATEST_TAG} is empty"; \
fi; \
else \ else \
LATEST_TAG="Development"; \ LATEST_TAG="Development"; \
fi; \ fi; \
@ -75,7 +80,7 @@ uninstall:
@for FILE_PO in $(wildcard *.po); do \ @for FILE_PO in $(wildcard *.po); do \
LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \
FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \
PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \
$(RM) "$${PATH_FILE_MO}"; \ $(RM) "$${PATH_FILE_MO}"; \
done done
@for SIZE in 16x16 32x32 48x48 scalable; do \ @for SIZE in 16x16 32x32 48x48 scalable; do \
@ -102,9 +107,9 @@ install: check uninstall
@echo "Install ..." @echo "Install ..."
@for FILE_PO in $(wildcard *.po); do \ @for FILE_PO in $(wildcard *.po); do \
LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \
install -dm755 "${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES"; \ install -dm755 "${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES"; \
FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \
PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \
echo "$${FILE_PO}"; \ echo "$${FILE_PO}"; \
msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \
done done
@ -113,16 +118,32 @@ install: check uninstall
rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \
done done
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" @cp ./com.ublinux.${PKGNAME}.policy ./compile/com.ublinux.${PKGNAME}${PKGIDENT}.policy
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" @sed -e 's+/usr/bin+${PREFIX}/bin+' -e 's+.run+${PKGIDENT}.run+g' ./compile/com.ublinux.${PKGNAME}${PKGIDENT}.policy -i
@install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop"
@install -Dm644 "com.ublinux.${PKGNAME}.policy" "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy" @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.checked.svg"
@sed -e '\|annotate key=|s|/usr/bin|${PREFIX}/bin|' -e '/action id=/s/\.run/${PKGIDENT}\.run/' -i ${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.warning.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.increase-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.profile-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.settings-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.sync-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.trash-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.view-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.edit-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.group-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.zoom-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.calendar-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.key-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.funnel-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.accept-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.cancel-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "icons/com.ublinux.${PKGNAME}.profile-settings-symbolic.svg"
@install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy"
@if [ -z ${DESTDIR} ]; then \ @if [ -z ${DESTDIR} ]; then \
[ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ [ -d "${DESTDIR}/usr/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}/usr/share/icons/hicolor/" &>/dev/null || true; \
update-desktop-database --quiet &>/dev/null || true; \ update-desktop-database --quiet &>/dev/null || true; \
[ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ [ -d "${DESTDIR}$/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \
fi fi
@echo "Install: OK" @echo "Install: OK"
@ -141,7 +162,7 @@ help:
echo "... init"; \ echo "... init"; \
echo "... debug"; \ echo "... debug"; \
echo "... prepare"; \ echo "... prepare"; \
echo "... build"; \ echo "... compile"; \
echo "... install"; \ echo "... install"; \
echo "... uninstall"; \ echo "... uninstall"; \
echo "... clean" echo "... clean"

@ -6,7 +6,8 @@ In order to build ubl-ubl-settings-usergroups you will need:
- CMake - CMake
- C compiler - C compiler
- GTK+ 3 & dependencies - GTK+ 3 & dependencies
- webkit2gtk (optional) - webkit2gtk
- [libublsettings-ui](https://gitea.ublinux.ru/Applications/libublsettings-ui)
Once you have all the necessary dependencies, you can use: Once you have all the necessary dependencies, you can use:
```sh ```sh

@ -1 +0,0 @@
VERSION 1.3

@ -2,8 +2,12 @@
<gresources> <gresources>
<gresource prefix="/com/ublinux/ui"> <gresource prefix="/com/ublinux/ui">
<file>ubl-settings-usergroups.glade</file> <file>ubl-settings-usergroups.glade</file>
<file>ubl-settings-usergroups-group-creation.glade</file>
<file>ubl-settings-usergroups-additional-settings.glade</file>
<file>ubl-settings-usergroups-password.glade</file>
<file>ubl-settings-usergroups-group.glade</file> <file>ubl-settings-usergroups-group.glade</file>
<file>ubl-settings-usergroups-user.glade</file> <file>ubl-settings-usergroups-user.glade</file>
<file>ubl-settings-usergroups-system.glade</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ubl-settings-usergroups.css</file> <file>ubl-settings-usergroups.css</file>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 15 3.484375 l -1 -1 l -7.46875 7.515625 l -3.414062 -3.476562 l -2 2 l 5.414062 5.476562 l 9.46875 -9.515625 z m 0 0" fill="#2e3436"/>
</svg>

After

Width:  |  Height:  |  Size: 284 B

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 12.7 12.7"
version="1.1"
id="svg1028"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.ubl-settings-usergroups.calendar-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1030"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
inkscape:zoom="8"
inkscape:cx="12.1875"
inkscape:cy="26.125"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1025" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="rect1439"
style="fill:#333333;stroke-width:0.305355"
d="M 2.6471148,0.45629283 V 2.0328102 H 0.68318058 V 11.814123 H 11.922101 V 2.0328102 H 9.8737776 V 0.45629283 H 8.2493132 V 2.0328102 H 4.2715795 V 0.45629283 Z M 8.4666759,0.67301605 H 9.6417113 V 3.3516891 H 8.4666759 Z m -5.6015595,6.382e-4 H 4.0395132 V 3.3523274 H 2.8651164 Z M 1.6133643,4.1757477 H 3.5248754 V 6.0878983 H 1.6133643 Z m 2.5476163,0 H 6.0724917 V 6.0878983 H 4.1609806 Z m 2.5329122,0 H 8.6054042 V 6.0878983 H 6.6938928 Z m 2.5277979,0 H 11.133842 V 6.0878983 H 9.2216907 Z M 1.6133643,6.6587943 H 3.5248754 V 8.5703057 H 1.6133643 Z m 2.5476163,0 H 6.0724917 V 8.5703057 H 4.1609806 Z m 2.5329122,0 H 8.6054042 V 8.5703057 H 6.6938928 Z m 2.5277979,0 H 11.133842 V 8.5703057 H 9.2216907 Z M 1.6133643,9.1354483 H 3.5248754 V 11.046959 H 1.6133643 Z m 2.5476163,0 H 6.0724917 V 11.046959 H 4.1609806 Z m 2.5329122,0 H 8.6054042 V 11.046959 H 6.6938928 Z m 2.5277979,0 H 11.133842 V 11.046959 H 9.2216907 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="3.175mm"
height="3.175mm"
viewBox="0 0 3.175 3.175"
version="1.1"
id="svg36"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.ubl-settings-usergroups.cancel-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview38"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="29.309298"
inkscape:cx="17.74181"
inkscape:cy="7.3867343"
inkscape:window-width="1920"
inkscape:window-height="1056"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs33" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-75.62433,-104.22131)">
<path
style="fill:#d40000;fill-opacity:1;stroke:none;stroke-width:0.264583"
d="m 77.21183,104.22131 c -0.8763,0 -1.5875,0.7112 -1.5875,1.5875 0,0.8763 0.7112,1.5875 1.5875,1.5875 0.8763,0 1.5875,-0.7112 1.5875,-1.5875 0,-0.8763 -0.7112,-1.5875 -1.5875,-1.5875 z m 0,0.56696 c 0.563335,0 1.020535,0.4572 1.020535,1.02054 0,0.15224 -0.03405,0.2963 -0.0939,0.42611 l -1.353627,-1.35275 c 0.129997,-0.0601 0.274468,-0.0939 0.426995,-0.0939 z m -0.91423,0.56874 1.366915,1.36603 c -0.136513,0.0678 -0.290022,0.1063 -0.452685,0.1063 -0.563336,0 -1.020536,-0.4572 -1.020536,-1.02053 0,-0.16238 0.03874,-0.31547 0.106306,-0.4518 z"
id="Symbol"
inkscape:label="#path2424"
class="error"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="16"
height="16"
version="1.1"
id="svg1352"
sodipodi:docname="com.ublinux.ubl-settings-logging.decrease-symbolic.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1356" />
<sodipodi:namedview
id="namedview1354"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="45.4375"
inkscape:cx="7.9889959"
inkscape:cy="7.9889959"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1352" />
<path
d="M3 7h10v2H3z"
style="marker:none"
color="#bebebe"
overflow="visible"
fill="#2e3436"
id="path1350" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 12.628906 0.664062 c -0.203125 0 -0.402344 0.074219 -0.554687 0.230469 l -1.769531 1.765625 l 3.050781 3.054688 l 1.769531 -1.769532 c 0.308594 -0.308593 0.308594 -0.804687 0 -1.109374 l -1.941406 -1.941407 c -0.15625 -0.15625 -0.355469 -0.230469 -0.554688 -0.230469 z m -3.109375 2.765626 l -8.519531 8.570312 v 3 h 3 l 8.519531 -8.570312 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 535 B

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1359"
width="256"
height="256"
viewBox="0 0 256 256"
sodipodi:docname="funnel.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1363" />
<sodipodi:namedview
id="namedview1361"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="1.5333252"
inkscape:cx="133.37027"
inkscape:cy="231.84906"
inkscape:window-width="1920"
inkscape:window-height="1027"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g1365" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g1365">
<path
style="fill:#313131;stroke-width:0.499256;fill-opacity:1"
d="m 104.65705,237.70905 c -0.62183,-0.24981 -1.35199,-1.03652 -1.62259,-1.74825 -0.31065,-0.81708 -0.49199,-18.8221 -0.49199,-48.8496 V 139.55564 L 63.364841,95.35613 24.187217,51.156622 18.806245,50.863604 C 12.784621,50.535703 10.172614,49.782271 6.8934643,47.427365 -3.1207996,40.235664 -1.3333195,24.490308 10.106237,19.127045 l 2.819779,-1.322011 H 128.00452 243.08303 l 2.81978,1.322011 c 3.59114,1.683651 6.65629,4.748951 8.33921,8.33961 1.8728,3.995783 1.8839,9.615451 0.0268,13.553783 -3.22543,6.840051 -9.19011,9.973686 -19.00052,9.982229 l -3.32143,0.0029 -39.24013,44.276883 -39.24012,44.27689 -0.011,35.72889 c -0.0103,33.46974 -0.0684,35.85515 -0.9194,37.72591 -0.49963,1.09836 -1.22486,2.25007 -1.61161,2.55936 -1.04329,0.83431 -44.14983,22.65836 -44.68151,22.62142 -0.25051,-0.0174 -0.96424,-0.23604 -1.58606,-0.48586 z"
id="path1444" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 12.7 12.7"
version="1.1"
id="svg1028"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.ubl-settings-usergroups.group-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1030"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
inkscape:zoom="8"
inkscape:cx="34.4375"
inkscape:cy="30.125"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1025" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="path4144"
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.885971;marker:none;enable-background:accumulate"
d="m 3.2793863,1.543 c -0.7951237,0 -1.4397053,0.6445813 -1.4397053,1.4397053 0,0.7951237 0.6445816,1.4397053 1.4397053,1.4397053 0.2821355,0 0.5452398,-0.081451 0.7673951,-0.221692 C 4.0100392,4.0395482 3.990454,3.8718093 3.990454,3.6994573 3.990454,3.1474809 4.1901387,2.642262 4.5201374,2.2520005 4.2697003,1.8276557 3.8077925,1.5429997 3.2793863,1.543 Z m 6.2001383,0 c -0.6332135,0 -1.1704828,0.4091278 -1.3632243,0.9772012 0.2118487,0.3424113 0.3343465,0.7465423 0.3343465,1.1792561 0,0.092318 -0.00572,0.1829472 -0.016536,0.2723349 0.262428,0.2773584 0.633444,0.4506184 1.0454142,0.4506184 0.795124,0 1.439705,-0.6445816 1.439705,-1.4397053 0,-0.795124 -0.644581,-1.4397056 -1.4397054,-1.4397053 z M 6.2202922,1.54456 c -1.143644,0 -2.0706747,0.956845 -2.0706747,2.1368205 0,1.1799755 0.9270307,2.1363035 2.0706747,2.1363038 1.1436437,0 2.0706744,-0.9563283 2.0706746,-2.1363038 C 8.2909668,2.501405 7.3639359,1.54456 6.2202922,1.54456 Z M 2.5595337,4.9024847 c -1.1963922,0 -2.15955811,0.9631642 -2.15955811,2.1595579 v 0.719853 c 0,0.4798999 0.48007405,0.4795572 0.48007405,0.4795572 H 2.2660115 C 2.855772,7.312625 3.9047898,6.6837713 5.1056314,6.6837713 H 6.1252075 C 6.0754582,6.4000096 5.9708652,6.1360221 5.8223835,5.9024236 5.2124673,5.7920326 4.6887185,5.4321821 4.3594236,4.9324569 4.2422733,4.9129331 4.1220995,4.9024847 3.9992389,4.9024847 Z m 6.2001383,0 c -0.2638566,0 -0.5164873,0.046943 -0.749825,0.1328084 C 7.75772,5.3748627 7.4120255,5.6402951 7.0109415,5.7928697 6.8228847,6.0520278 6.690906,6.3547132 6.6331866,6.6837713 h 0.7027995 c 1.2010514,0 2.2499172,0.629095 2.8396199,1.5781983 h 1.703255 c 0,0 0.480075,-1.741e-4 0.480075,-0.480074 v -0.719853 c 0,-1.1963937 -0.963165,-2.1595579 -2.159559,-2.1595579 z M 5.1852131,6.8460352 c -1.7207973,0 -3.1062702,1.1132468 -3.1062702,2.8887128 V 10.8029 c 0,0.712178 0.6903971,0.712101 0.6903971,0.712101 h 6.9024211 c 0,0 0.6898799,7.7e-5 0.6898799,-0.712101 V 9.734748 c 0,-1.775466 -1.3849541,-2.8887128 -3.1057533,-2.8887128 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="16"
height="16"
version="1.1"
id="svg1162"
sodipodi:docname="com.ublinux.ubl-settings-logging.increase-symbolic.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1166" />
<sodipodi:namedview
id="namedview1164"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="45.4375"
inkscape:cx="7.9889959"
inkscape:cy="7.9889959"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1162" />
<path
style="marker:none"
d="M7 3v4H3v2h4v4h2V9h4V7H9V3z"
color="#bebebe"
overflow="visible"
fill="#2e3436"
id="path1160" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
id="svg2"
viewBox="0 0 100 100"
version="1.1"
sodipodi:docname="com.ublinux.ubl-settings-repomanager.document-sign-symbolic.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs498" />
<sodipodi:namedview
id="namedview496"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="5.1406663"
inkscape:cx="-3.7932826"
inkscape:cy="51.938792"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="50"
y1="754.7531"
x2="50"
y2="828.357"
gradientTransform="translate(0,-742.08062)">
<stop
offset="0"
style="stop-color:#35762e"
id="stop488" />
<stop
offset="1"
style="stop-color:#6daa43"
id="stop490" />
</linearGradient>
<path
id="path493"
style="display:inline;fill:#1a1a1a;stroke-width:1.16507"
d="M 50.361177,1.5488617 A 23.427829,24.021389 0 0 0 28.297887,17.661878 c -0.02133,0.01144 -0.04386,0.02079 -0.06517,0.03225 v 0.145162 a 23.427829,24.021389 0 0 0 -1.298898,7.730469 23.427829,24.021389 0 0 0 4.539401,14.110698 c 0,0 0.0023,0.0024 0.0023,0.0024 2.246699,3.69522 5.500248,6.687335 9.393416,8.562272 v 41.408124 l 9.550721,9.792695 9.550721,-9.792695 -0.57529,-8.61066 4.485468,-4.601414 -4.485468,-4.601415 6.78663,-6.960878 -6.78663,-6.960878 0.57529,-9.672879 c 4.004586,-1.958268 7.371165,-5.141825 9.645105,-9.064579 a 23.427829,24.021389 0 0 0 4.175351,-13.610695 23.427829,24.021389 0 0 0 -0.885408,-6.51387 v -0.552999 c -0.06101,-0.03572 -0.125335,-0.06593 -0.186521,-0.101386 A 23.427829,24.021389 0 0 0 50.361177,1.5488617 Z m 0.09888,11.9816513 A 11.933611,3.3885097 0 0 1 62.392839,16.919938 11.933611,3.3885097 0 0 1 50.460055,20.309362 11.933611,3.3885097 0 0 1 38.525024,16.919938 11.933611,3.3885097 0 0 1 50.460055,13.530513 Z M 44.09141,53.671347 h 3.222525 V 86.351298 H 44.09141 Z" />
<rect
style="fill:#1a1a1a;stroke-width:1.899"
id="rect2334"
width="9.6674757"
height="39.283848"
x="40.868935"
y="50.3694" />
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 12.7 12.7"
version="1.1"
id="svg1028"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.ubl-settings-usergroups.profile-settings-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1030"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
inkscape:zoom="5.6568543"
inkscape:cx="6.098796"
inkscape:cy="29.698485"
inkscape:window-width="1920"
inkscape:window-height="1023"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1025" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="path4144"
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.15293;marker:none;enable-background:accumulate"
d="m 28.845703,5.6699219 c -4.624559,0 -8.373047,3.748488 -8.373047,8.3730471 0,4.624558 3.748488,8.373047 8.373047,8.373047 4.624556,0 8.373047,-3.748489 8.373047,-8.373047 0,-4.6245591 -3.748491,-8.3730471 -8.373047,-8.3730471 z m -4.1875,19.5371091 c -2.530148,0 -4.880296,0.742341 -6.847656,2.019531 0.183931,0.717098 0.465323,1.214574 1.355469,0.839844 3.221994,-1.583811 5.226402,2.142941 6.138672,4.650391 0.633999,1.895897 -1.396782,2.997482 -2.021485,4.296875 1.816695,1.213244 2.783132,3.672793 1.3125,5.603516 -0.303999,0.768494 -0.771796,1.523101 -1.353515,2.128906 h 19.558593 c 0,0 2.791016,1.54e-4 2.791016,-2.791016 v -4.1875 c 0,-6.958407 -5.602142,-12.560547 -12.560547,-12.560547 z"
transform="scale(0.26458333)"
sodipodi:nodetypes="sssssscccccccssss" />
<path
d="m 6.1654455,8.763044 c 0.035522,0.096576 0.00555,0.2042531 -0.071044,0.2730777 L 5.6137396,9.4734904 c 0.012206,0.092133 0.018871,0.1864921 0.018871,0.2819582 0,0.095466 -0.00667,0.1898218 -0.018871,0.2819574 l 0.4806614,0.437368 c 0.076595,0.06882 0.1065666,0.176502 0.071044,0.273078 -0.048843,0.132099 -0.1076769,0.258647 -0.1753913,0.380754 l -0.052173,0.08992 c -0.073265,0.122108 -0.15541,0.237556 -0.2453259,0.346342 -0.065494,0.07993 -0.1742811,0.106569 -0.2719676,0.07549 l -0.61831,-0.196491 c -0.1487499,0.114339 -0.3130404,0.209804 -0.4884317,0.281958 l -0.138759,0.633852 C 4.1528845,12.460695 4.0751795,12.540619 3.9730532,12.55727 3.8198634,12.5828 3.6622329,12.59612 3.5012725,12.59612 3.340312,12.59612 3.1826819,12.5828 3.0294921,12.55727 2.9273654,12.54061 2.8496602,12.46069 2.8274589,12.359677 L 2.6886998,11.725825 C 2.5133087,11.653671 2.3490176,11.558205 2.2002681,11.443867 L 1.5830679,11.64146 c -0.097687,0.03108 -0.2064734,0.0033 -0.2719677,-0.07549 -0.089916,-0.108787 -0.172061,-0.224235 -0.2453259,-0.346342 l -0.052173,-0.08991 c -0.067715,-0.122109 -0.12654796,-0.248657 -0.17539116,-0.380756 -0.035522,-0.09658 -0.00555,-0.204253 0.071044,-0.273078 L 1.3899154,10.038511 C 1.3777094,9.945265 1.3710444,9.8509097 1.3710444,9.7554437 c 0,-0.095466 0.00667,-0.1898218 0.018871,-0.2819582 L 0.90925454,9.0361224 C 0.83265984,8.9672973 0.80268794,8.8596207 0.83821014,8.7630446 0.88705344,8.6309458 0.94588704,8.5043976 1.0136013,8.3822895 l 0.052173,-0.089916 C 1.1390392,8.1702654 1.2211845,8.054818 1.3111002,7.946031 1.3765943,7.8661054 1.4853816,7.8394644 1.5830679,7.8705466 L 2.2013783,8.0670293 C 2.3501278,7.9526919 2.5144184,7.8572258 2.6898099,7.785071 L 2.828569,7.1512198 C 2.85077,7.0502034 2.928475,6.9702781 3.0306022,6.9536272 c 0.1531899,-0.026641 0.31082,-0.039963 0.4717804,-0.039963 0.1609607,0 0.3185909,0.013322 0.4717807,0.038853 0.1021266,0.01665 0.1798318,0.096576 0.2020333,0.1975927 L 4.3149556,7.783961 C 4.4903468,7.856116 4.6546374,7.951582 4.8033872,8.0659195 L 5.4216971,7.8694357 c 0.097687,-0.031082 0.2064736,-0.00333 0.2719676,0.075484 0.089916,0.1087872 0.1720613,0.2242347 0.245326,0.3463428 l 0.052174,0.089916 c 0.067715,0.1221083 0.1265481,0.2486563 0.1753912,0.3807547 z m -2.6630629,1.880461 a 0.88805773,0.88805773 0 1 0 0,-1.7761143 0.88805773,0.88805773 0 1 0 0,1.7761143 z"
id="path2"
style="stroke-width:0.0111007" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="48"
height="48"
viewBox="0 0 12.7 12.7"
version="1.1"
id="svg1028"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04, custom)"
sodipodi:docname="com.ublinux.ubl-settings-logging.profile-symbolic.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1030"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
units="px"
inkscape:zoom="8"
inkscape:cx="55"
inkscape:cy="30.1875"
inkscape:window-width="1920"
inkscape:window-height="1056"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1025" />
<g
inkscape:label="Слой 1"
inkscape:groupmode="layer"
id="layer1">
<path
inkscape:connector-curvature="0"
d="M 6.442586,0 C 4.9396607,0 3.7212931,1.218368 3.7212931,2.7212931 c 0,1.5029251 1.2183676,2.721293 2.7212929,2.721293 1.502925,0 2.721293,-1.2183679 2.721293,-2.721293 C 9.163879,1.218368 7.945511,0 6.442586,0 Z M 5.0819394,6.3496861 C 2.8205458,6.3496861 1,8.1702286 1,10.431626 v 1.360646 c 0,0.907096 0.9070999,0.907096 0.9070999,0.907096 h 9.0709751 c 0,0 0.907097,0 0.907097,-0.907096 v -1.360646 c 0,-2.2613974 -1.820543,-4.0819399 -4.0819395,-4.0819399 z"
id="path4144"
sodipodi:nodetypes="ssssssccccccss"
style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.67464;marker:none;enable-background:accumulate" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M495.9 166.6c3.2 8.7 .5 18.4-6.4 24.6l-43.3 39.4c1.1 8.3 1.7 16.8 1.7 25.4s-.6 17.1-1.7 25.4l43.3 39.4c6.9 6.2 9.6 15.9 6.4 24.6c-4.4 11.9-9.7 23.3-15.8 34.3l-4.7 8.1c-6.6 11-14 21.4-22.1 31.2c-5.9 7.2-15.7 9.6-24.5 6.8l-55.7-17.7c-13.4 10.3-28.2 18.9-44 25.4l-12.5 57.1c-2 9.1-9 16.3-18.2 17.8c-13.8 2.3-28 3.5-42.5 3.5s-28.7-1.2-42.5-3.5c-9.2-1.5-16.2-8.7-18.2-17.8l-12.5-57.1c-15.8-6.5-30.6-15.1-44-25.4L83.1 425.9c-8.8 2.8-18.6 .3-24.5-6.8c-8.1-9.8-15.5-20.2-22.1-31.2l-4.7-8.1c-6.1-11-11.4-22.4-15.8-34.3c-3.2-8.7-.5-18.4 6.4-24.6l43.3-39.4C64.6 273.1 64 264.6 64 256s.6-17.1 1.7-25.4L22.4 191.2c-6.9-6.2-9.6-15.9-6.4-24.6c4.4-11.9 9.7-23.3 15.8-34.3l4.7-8.1c6.6-11 14-21.4 22.1-31.2c5.9-7.2 15.7-9.6 24.5-6.8l55.7 17.7c13.4-10.3 28.2-18.9 44-25.4l12.5-57.1c2-9.1 9-16.3 18.2-17.8C227.3 1.2 241.5 0 256 0s28.7 1.2 42.5 3.5c9.2 1.5 16.2 8.7 18.2 17.8l12.5 57.1c15.8 6.5 30.6 15.1 44 25.4l55.7-17.7c8.8-2.8 18.6-.3 24.5 6.8c8.1 9.8 15.5 20.2 22.1 31.2l4.7 8.1c6.1 11 11.4 22.4 15.8 34.3zM256 336a80 80 0 1 0 0-160 80 80 0 1 0 0 160z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V448c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H176c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"/></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M170.5 51.6L151.5 80h145l-19-28.4c-1.5-2.2-4-3.6-6.7-3.6H177.1c-2.7 0-5.2 1.3-6.7 3.6zm147-26.6L354.2 80H368h48 8c13.3 0 24 10.7 24 24s-10.7 24-24 24h-8V432c0 44.2-35.8 80-80 80H112c-44.2 0-80-35.8-80-80V128H24c-13.3 0-24-10.7-24-24S10.7 80 24 80h8H80 93.8l36.7-55.1C140.9 9.4 158.4 0 177.1 0h93.7c18.7 0 36.2 9.4 46.6 24.9zM80 128V432c0 17.7 14.3 32 32 32H336c17.7 0 32-14.3 32-32V128H80zm80 64V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16zm80 0V400c0 8.8-7.2 16-16 16s-16-7.2-16-16V192c0-8.8 7.2-16 16-16s16 7.2 16 16z"/></svg>

After

Width:  |  Height:  |  Size: 918 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. --><path d="M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z"/></svg>

After

Width:  |  Height:  |  Size: 1009 B

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,160 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<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"
width="16"
height="16"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.48.1 r9760"
version="1.0"
sodipodi:docname="zoom-fit.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 8 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="16 : 8 : 1"
inkscape:persp3d-origin="8 : 5.3333333 : 1"
id="perspective18" />
<linearGradient
id="StandardGradient"
gradientTransform="matrix(1.0022346,0,0,1.0022346,-2.7263793e-3,-3.4274669e-3)"
x1="8.3667202"
y1="1.0011907"
x2="8.3667202"
y2="14.839209"
gradientUnits="userSpaceOnUse">
<stop
style="stop-color:#000000;stop-opacity:0.86274511;"
offset="0"
id="stop3292" />
<stop
style="stop-color:#000000;stop-opacity:0.47058824;"
offset="1"
id="stop3294" />
</linearGradient>
<inkscape:perspective
id="perspective3648"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
inkscape:collect="always"
xlink:href="#StandardGradient"
id="linearGradient3626"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0022346,0,0,1.0022346,-20.002726,-0.00342747)"
x1="8.3667202"
y1="1.0011907"
x2="8.3667202"
y2="14.839209" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3633">
<path
style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"
d="m -20,0 0,16 16,0 0,-16 -16,0 z m 6.03125,1 c 1.284136,0 2.583434,0.518602 3.5625,1.5 1.550185,1.5538805 1.873026,3.8766945 0.96875,5.75 -0.02944,0.062991 -0.492783,1.0685426 0,1.5625 0.298906,0.299618 0.66775,0.19791 1.125,0.65625 l 3.03125,3.0625 c 0.00872,0.01101 0.600029,0.617291 0,1.21875 -0.59772,0.599143 -1.18433,-0.0032 -1.1875,0 l -3.0625,-3.0625 c -0.45725,-0.45834 -0.357345,-0.856632 -0.65625,-1.15625 -0.402987,-0.403942 -1.16538,-0.182596 -1.46875,-0.0625 -0.04854,0.02556 -0.10707,0.0699 -0.15625,0.09375 -1.868852,0.90643 -4.168562,0.585131 -5.71875,-0.96875 -1.958131,-1.9627964 -1.95813,-5.1309536 0,-7.09375 0.979065,-0.9813981 2.278363,-1.5 3.5625,-1.5 z m 0,1.28125 c -2.076912,0 -3.749999,1.6993902 -3.75,3.78125 0,2.0818599 1.673088,3.7500002 3.75,3.75 2.076911,0 3.75,-1.6681403 3.75,-3.75 0,-2.0818599 -1.673089,-3.7812501 -3.75,-3.78125 z"
id="path3635" />
</clipPath>
<linearGradient
inkscape:collect="always"
xlink:href="#StandardGradient"
id="linearGradient5450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0022346,0,0,1.0022346,-0.00272638,-0.00342747)"
x1="8.3667202"
y1="1.0011907"
x2="8.3667202"
y2="14.839209" />
<linearGradient
inkscape:collect="always"
xlink:href="#StandardGradient"
id="linearGradient5454"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0022346,0,0,1.0022346,-0.00272638,-0.00342747)"
x1="8.3667202"
y1="1.0011907"
x2="8.3667202"
y2="14.839209" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#9a9a9a"
borderopacity="1"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="24.785766"
inkscape:cx="1.7734833"
inkscape:cy="9.6679286"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="true"
inkscape:showpageshadow="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="1028"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1">
<sodipodi:guide
orientation="1,0"
position="0,112"
id="guide2383" />
<sodipodi:guide
orientation="0,1"
position="26.278146,128"
id="guide2385" />
<sodipodi:guide
orientation="1,0"
position="128,54.082119"
id="guide2387" />
<sodipodi:guide
orientation="0,1"
position="78.156291,0"
id="guide2389" />
<inkscape:grid
type="xygrid"
id="grid3672"
visible="true"
enabled="true" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Cross"
style="display:inline">
<path
style="fill:#bebebe;fill-opacity:1;stroke:none;display:inline"
d="m 6.0346439,0.456963 c -1.4236033,0 -2.8640143,0.5749259 -3.9494135,1.662911 -2.17079758,2.1759704 -2.17079809,5.6882127 0,7.8641827 1.7185494,1.7226453 4.2680247,2.0788393 6.3398481,1.0739643 0.054521,-0.02644 0.1194082,-0.07559 0.1732199,-0.103932 0.3363183,-0.133139 1.1815124,-0.378525 1.6282666,0.06929 0.331369,0.33216 0.220613,0.773709 0.727524,1.281828 l 3.395109,3.395109 c 0.0035,-0.0035 0.653835,0.664216 1.316472,0 0.665196,-0.666781 0.0097,-1.338905 0,-1.351115 l -3.360466,-3.395109 c -0.506911,-0.50812 -0.915814,-0.395365 -1.247183,-0.727524 -0.546303,-0.5476049 -0.03264,-1.6623665 0,-1.732199 C 12.060508,6.4176092 11.702604,3.8425172 9.9840571,2.119874 8.8986578,1.031889 7.4582474,0.456963 6.0346439,0.456963 z m 0,1.4204031 c 2.3024792,-10e-8 4.1572781,1.8839564 4.1572781,4.1919215 0,2.3079648 -1.8547987,4.1572774 -4.1572781,4.1572774 -2.3024792,0 -4.1572774,-1.8493124 -4.1572774,-4.1572774 7e-7,-2.307965 1.8547983,-4.1919215 4.1572774,-4.1919215 z"
id="path3007"
inkscape:connector-curvature="0"
inkscape:transform-center-x="-2.2103061"
inkscape:transform-center-y="2.2258551" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.5 KiB

@ -8,10 +8,10 @@ include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS}) link_directories(${GTK_LIBRARY_DIRS})
add_definitions(${GTK_CFLAGS_OTHER}) add_definitions(${GTK_CFLAGS_OTHER})
#pkg_check_modules(VTE291 REQUIRED vte-2.91) pkg_check_modules(VTE291 REQUIRED vte-2.91)
#include_directories(${VTE291_INCLUDE_DIRS}) include_directories(${VTE291_INCLUDE_DIRS})
#link_directories(${VTE291_LIBRARY_DIRS}) link_directories(${VTE291_LIBRARY_DIRS})
#add_definitions(${VTE291_CFLAGS_OTHER}) add_definitions(${VTE291_CFLAGS_OTHER})
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
@ -36,6 +36,10 @@ add_custom_target(GLADE ubl-settings-usergroups.glade)
set(DEPENDFILES set(DEPENDFILES
../ubl-settings-usergroups.glade ../ubl-settings-usergroups.glade
../ubl-settings-usergroups-additional-settings.glade
../ubl-settings-usergroups-group-creation.glade
../ubl-settings-usergroups-password.glade
../ubl-settings-usergroups-system.glade
../ubl-settings-usergroups-user.glade ../ubl-settings-usergroups-user.glade
../ubl-settings-usergroups-group.glade ../ubl-settings-usergroups-group.glade
../gresource.xml ../gresource.xml
@ -75,15 +79,15 @@ set(SOURCE_FILES
ubl-settings-usergroups.c ubl-settings-usergroups.c
ubl-settings-usergroups.h ubl-settings-usergroups.h
ubl-strings.h ubl-strings.h
ubl-utils.h
ubl-utils.c
${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h
) )
set(LIBRARIES set(LIBRARIES
${GTK_LIBRARIES} ${GTK_LIBRARIES}
${WEBKIT_LIBRARIES} ${WEBKIT_LIBRARIES}
# ${VTE291_LIBRARIES} ${VTE291_LIBRARIES}
ubl-utils
ublsettings-ui
pthread) pthread)

@ -1,409 +1,349 @@
#include "ubl-settings-usergroups.h" #include "ubl-settings-usergroups.h"
config main_config;
//functions
void yon_load_proceed(char *command){
}
void yon_save_proceed(char *section,YON_CONFIG_TYPE type){
}
void on_filechooser_open(GtkWidget *self, GtkEntry *output_target){
// ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new();
// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
// gtk_widget_show(window->Window);
config main_config;
//signal emmit handlers - no header initialization
/**on_close_subwindow(GtkWidget *self)
* [EN]
* Closes window in which [self] is contained.
* [RU]
* Закрывает окно, в котором расположен виджет [self].
*/
void on_close_subwindow(GtkWidget *self){
gtk_widget_destroy(gtk_widget_get_toplevel(self));
}
/**yon_open_browser(GtkWidget *self, char *link)
* [EN]
* Opens browser with [link] link.
* [RU]
* Открывает браузер с [link] ссылкой.
*/
void yon_open_browser(GtkWidget *self, char *link){
yon_ubl_browser_window_open(link,TITLE_LABEL);
}
/**on_open_documentation_confirmation(GtkWidget *self, char *link)
* [EN]
* Opens confirmation window for [link] link.
* [RU]
* Открывает окно подтверждение перехода по ссылке [link].
*/
void on_open_documentation_confirmation(GtkWidget *self, char *link){
if (main_config.always_open_documentation==0){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window));
widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow");
widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton");
widgets->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton");
widgets->HatText = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
widgets->HeaderText = yon_gtk_builder_get_widget(builder,"helpHeader");
widgets->InfoText = yon_gtk_builder_get_widget(builder,"helpText");
widgets->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox");
gtk_label_set_text(GTK_LABEL(widgets->HatText),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(widgets->HeaderText),HELP_TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(widgets->InfoText),HELP_INFO_LABEL);
gtk_button_set_label(GTK_BUTTON(widgets->AcceptButton),OPEN_HELP_LABEL);
gtk_button_set_label(GTK_BUTTON(widgets->AlwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL);
gtk_button_set_label(GTK_BUTTON(widgets->CloseButton),CANCEL_LABEL);
gtk_widget_show_all(widgets->Window);
g_signal_connect(G_OBJECT(widgets->CloseButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link));
g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
} else {
yon_open_browser(self,link);
}
}
/**on_link(GtkWidget *self, char* uri, gpointer user_data)
* [EN]
* Signal for hadnling AboutDialog links.
* Connect to "activate-link" signal.
* [self] is AboutDialog window;
* [uri] is activated link;
* [user_data] is pointer for user data, hasn't used in standard handler;
* [RU]
* Функция для обработки сигнала нажатия на ссылку окна AboutDialog.
* Присоединять к сигналу "activate-link".
* [self] - окно AboutDialog;
* [uri] - ссылка, по которой совершается переход;
* [user_data] - указатель на любые другие данные, не используется в стандартном обработчике;
*/
void on_link(GtkWidget *self, char* uri, gpointer user_data){
gtk_widget_destroy(self);
on_open_documentation_confirmation(self,uri);
}
/**on_about()
* [EN]
* Function for setting up and showing AboutDialog.
* Connect it to "activate" signal of Documentation MenuItem.
* [RU]
* Функиця для настройки и показа окна AboutDialog.
* Присоединять к сигналу "activate" кнопки справки типа MenuItem.
*/
void on_about(){
GtkBuilder *builder=gtk_builder_new_from_resource(glade_path);
GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow");
GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic");
GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide");
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application);
gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL);
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL);
g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL);
gtk_widget_set_visible(hideButtonBox,0);
gtk_widget_destroy(hideButtonBox);
gtk_widget_show(window);
}
void on_toggle_button_switched(GtkToggleButton *self, GtkWidget *widget){
gtk_widget_set_sensitive(widget,!gtk_toggle_button_get_active(self));
}
//functions
void on_uid_changed(GtkWidget *self, dictionary *dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
user_cfg->uid = atoi(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->UserUIDEntry))));
}
void on_username_changed(GtkWidget *self, dictionary *dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
user_cfg->username = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userUserNameEntry))));
}
void on_login_changed(GtkWidget *self, dictionary *dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
user_cfg->login = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userLoginEntry))));
} }
void on_password_changed(GtkWidget *self, dictionary *dict){ void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){
user_window *window = yon_dictionary_get_data(dict->first,user_window*); ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new();
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),0),0);
user_cfg->password = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userPasswordEntry)))); g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
} gtk_widget_show(window->GroupsWindow);
void on_group_changed(GtkWidget *self, dictionary *dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
user_cfg->main_group = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userGroupsEntry))));
} }
void on_hash_changed(GtkWidget *self, dictionary *dict){ void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){
user_window *window = yon_dictionary_get_data(dict->first,user_window*); ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new();
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
user_cfg->password_hash = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordHashAlgorithmCombo)); gtk_widget_show(window->GroupsWindow);
}
void on_extra_changed(GtkWidget *self, dictionary *dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
user_cfg->extra_options = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userExtraOptionsEntry))));
} }
void on_user_def_password_changed(GtkWidget *self, dictionary *dict){ void on_password_change(GtkWidget *self, GtkEntry *output_target){
user_window *window = yon_dictionary_get_data(dict->first,user_window*); ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new();
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
user_cfg->password=NULL; gtk_widget_show(window->CreateGroupWindow);
user_cfg->password_default = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
on_toggle_button_switched(GTK_TOGGLE_BUTTON(self),window->userPasswordEntry);
}
void on_auto_uid_changed(GtkWidget *self, dictionary *dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
user_cfg->uid=0;
user_cfg->uid_default = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
on_toggle_button_switched(GTK_TOGGLE_BUTTON(self),window->UserUIDEntry);
} }
void on_SAMBA_changed(GtkWidget *self, dictionary *dict){ void on_additional_settings_clicked(GtkWidget *self, GtkEntry *output_target){
user_window *window = yon_dictionary_get_data(dict->first,user_window*); ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new();
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
user_cfg->sync_SAMBA=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); gtk_widget_show(window->Window);
}
void on_user_accept(GtkWidget *self, dictionary * dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*);
user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*);
main_window *widgets = yon_dictionary_get_data(dict->first->next->next,main_window*);
GtkTreeIter iter;
gtk_list_store_append(main_config.usersListStore,&iter);
gtk_list_store_set(main_config.usersListStore,&iter,(user_cfg->uid_default==0) ? 0 : 1,(user_cfg->uid_default==0) ? user_cfg->uid : 1,2,user_cfg->login, 3,(user_cfg->password_default==0) ? "*******" : _("Default"),5,user_cfg->username,-1);
// widgets->MainUserTree;
on_close_subwindow(self);
}
void yon_load_proceed(char *command){
if (yon_config_load_register(command))
yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
else
yon_ubl_status_box_render(LOAD_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
} }
void on_def_groups_accept(GtkWidget *self, dictionary *windowes){ void on_expiration_clicked(GtkWidget *self, GtkEntry *output_target){
char *groups_string = "";
main_window *widgets = yon_dictionary_get_data(windowes->first->next,main_window*);
groups_window *window = yon_dictionary_get_data(windowes->first,groups_window*);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAdmCheck))==1) groups_string = yon_char_append(groups_string,"adm,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAudioCheck))==1) groups_string = yon_char_append(groups_string,"audio,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAutologinCheck))==1) groups_string = yon_char_append(groups_string,"autologin,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAvahiCheck))==1) groups_string = yon_char_append(groups_string,"avahi,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBinCheck))==1) groups_string = yon_char_append(groups_string,"bin,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBrlapiCheck))==1) groups_string = yon_char_append(groups_string,"brlapi,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBrittyCheck))==1) groups_string = yon_char_append(groups_string,"britty,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBumblbeeCheck))==1) groups_string = yon_char_append(groups_string,"bumblbee,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsChronyCheck))==1) groups_string = yon_char_append(groups_string,"chrony,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsClamavCheck))==1) groups_string = yon_char_append(groups_string,"clamav,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsCockpitWsCheck))==1) groups_string = yon_char_append(groups_string,"cockpit-ws,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsCockpitWsinstanceCheck))==1) groups_string = yon_char_append(groups_string,"cockpit-wsinstance,");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsColordCheck))==1) groups_string = yon_char_append(groups_string,"colord,");
if (strcmp(groups_string,"")!=0) groups_string[strlen(groups_string)-1]='\0';
gtk_entry_buffer_set_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultGroupsEntry)),groups_string,strlen(groups_string));
on_close_subwindow(self);
} }
void on_groups_open(GtkWidget *self, main_window *widgets){ // standard functions
ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(){
ubl_settings_usergroups_additional_settings_window *window = malloc(sizeof(ubl_settings_usergroups_additional_settings_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_additional_settings);
window->Window=yon_gtk_builder_get_widget(builder,"Window");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->DefaultUserNameEntry=yon_gtk_builder_get_widget(builder,"DefaultUserNameEntry");
window->DefaultUserAdministratorCheck=yon_gtk_builder_get_widget(builder,"DefaultUserAdministratorCheck");
window->DefaultPasswordCombo=yon_gtk_builder_get_widget(builder,"DefaultPasswordCombo");
window->DefaultPasswordEntry=yon_gtk_builder_get_widget(builder,"DefaultPasswordEntry");
window->RootPasswordCombo=yon_gtk_builder_get_widget(builder,"RootPasswordCombo");
window->RootPasswordEntry=yon_gtk_builder_get_widget(builder,"RootPasswordEntry");
window->PasswordHashCombo=yon_gtk_builder_get_widget(builder,"PasswordHashCombo");
window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton");
window->AcceptButton=yon_gtk_builder_get_widget(builder,"AcceptButton");
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
} }
void on_def_groups_open(GtkWidget *self, main_window *widgets){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_groups_path);
groups_window *window = malloc(sizeof(groups_window));
window->Window = yon_gtk_builder_get_widget(builder,"GroupsWindow");
window->GroupsCancelButton = yon_gtk_builder_get_widget(builder,"GroupsCancelButton");
window->GroupsOkButton = yon_gtk_builder_get_widget(builder,"GroupsOkButton");
window->GroupsAdmCheck = yon_gtk_builder_get_widget(builder,"groupsAdmGroupCheck");
window->GroupsAudioCheck = yon_gtk_builder_get_widget(builder,"groupsAudioGroupCheck");
window->GroupsAutologinCheck = yon_gtk_builder_get_widget(builder,"groupsAutologinGroupCheck");
window->GroupsAvahiCheck = yon_gtk_builder_get_widget(builder,"groupsAvahiGroupCheck");
window->GroupsBinCheck = yon_gtk_builder_get_widget(builder,"groupsBinGroupCheck");
window->GroupsBrlapiCheck = yon_gtk_builder_get_widget(builder,"groupsBrlapiGroupCheck");
window->GroupsBrittyCheck = yon_gtk_builder_get_widget(builder,"groupsBrittyGroupCheck");
window->GroupsBumblbeeCheck = yon_gtk_builder_get_widget(builder,"groupsBumblbeeGroupCheck");
window->GroupsChronyCheck = yon_gtk_builder_get_widget(builder,"groupsChronyGroupCheck");
window->GroupsClamavCheck = yon_gtk_builder_get_widget(builder,"groupsClamavGroupCheck");
window->GroupsCockpitWsCheck = yon_gtk_builder_get_widget(builder,"groupsCockpitWsGroupCheck");
window->GroupsCockpitWsinstanceCheck = yon_gtk_builder_get_widget(builder,"groupsCockpitWsinstanceGroupCheck");
window->GroupsColordCheck = yon_gtk_builder_get_widget(builder,"groupsColordGroupCheck");
dictionary *windgets=NULL;
yon_dictionary_add_or_create_if_exists_with_data(windgets,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(windgets,"widgets",widgets);
g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_close_subwindow),window);
g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_def_groups_accept),windgets);
gtk_widget_show(window->Window);
}
void on_user_add(GtkWidget *self, main_window *widgets){ void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_user_path); ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new();
user_window *window = malloc(sizeof(user_window)); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
window->Window = yon_gtk_builder_get_widget(builder,"CreateUserWindow");
window->UserAdditionalGroupsButton = yon_gtk_builder_get_widget(builder,"UserAdditionalGroupsButton");
window->UserCancelButton = yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton = yon_gtk_builder_get_widget(builder,"UserOkButton");
window->UserUIDAutoCheck = yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
window->UserUIDEntry = yon_gtk_builder_get_widget(builder,"userUIDEntry");
window->userUserNameEntry = yon_gtk_builder_get_widget(builder,"userUserNameEntry");
window->userLoginEntry = yon_gtk_builder_get_widget(builder,"userLoginEntry");
window->userPasswordDefaultCheck = yon_gtk_builder_get_widget(builder,"userPasswordDefaultCheck");
window->userPasswordEntry = yon_gtk_builder_get_widget(builder,"userPasswordEntry");
window->userGroupsEntry = yon_gtk_builder_get_widget(builder,"userGroupsEntry");
window->userPasswordHashAlgorithmCombo = yon_gtk_builder_get_widget(builder,"userPasswordHashAlgorithmCombo");
window->userSyncSAMBACheck = yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck");
window->userExtraOptionsEntry = yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry");
user_config *user_cfg=malloc(sizeof(user_config));
user_cfg->username=NULL;
user_cfg->login=NULL;
user_cfg->password=NULL;
user_cfg->main_group=NULL;
user_cfg->additional_groups=NULL;
user_cfg->extra_options=NULL;
user_cfg->uid=-1;
user_cfg->password_default=0;
user_cfg->password_hash=-1;
user_cfg->sync_SAMBA=0;
dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window)
yon_dictionary_add_or_create_if_exists_with_data(dict,"config",user_cfg);
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_user_accept),dict);
// g_signal_connect(G_OBJECT(window->UserUIDAutoCheck),"clicked",G_CALLBACK(on_toggle_button_switched),window->UserUIDEntry);
// g_signal_connect(G_OBJECT(window->userPasswordDefaultCheck),"clicked",G_CALLBACK(on_toggle_button_switched),window->UserPasswordEntry);
g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_open),NULL);
g_signal_connect(G_OBJECT(window->UserUIDAutoCheck),"toggled",G_CALLBACK(on_auto_uid_changed),dict); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window));
g_signal_connect(G_OBJECT(window->UserUIDEntry),"changed",G_CALLBACK(on_uid_changed),dict);
g_signal_connect(G_OBJECT(window->userUserNameEntry),"changed",G_CALLBACK(on_username_changed),dict);
g_signal_connect(G_OBJECT(window->userLoginEntry),"changed",G_CALLBACK(on_login_changed),dict);
g_signal_connect(G_OBJECT(window->userPasswordDefaultCheck),"toggled",G_CALLBACK(on_user_def_password_changed),dict);
g_signal_connect(G_OBJECT(window->userPasswordEntry),"changed",G_CALLBACK(on_password_changed),dict);
g_signal_connect(G_OBJECT(window->userGroupsEntry),"changed",G_CALLBACK(on_group_changed),dict);
g_signal_connect(G_OBJECT(window->userPasswordHashAlgorithmCombo),"changed",G_CALLBACK(on_hash_changed),dict);
g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(on_SAMBA_changed),dict);
g_signal_connect(G_OBJECT(window->userExtraOptionsEntry),"changed",G_CALLBACK(on_extra_changed),dict);
gtk_widget_show(window->Window); gtk_widget_show(window->Window);
}
void on_user_edit(){
} }
void on_user_delete(){
} ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new(){
ubl_settings_usergroups_group_creation_window *window = malloc(sizeof(ubl_settings_usergroups_group_creation_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group_creation);
window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry");
window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry");
window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry");
window->UserAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"UserAdditionalGroupsButton");
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
window->AdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton");
window->UnuniqueGIDCheck=yon_gtk_builder_get_widget(builder,"UnuniqueGIDCheck");
window->SystemGroupCheck=yon_gtk_builder_get_widget(builder,"SystemGroupCheck");
window->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo");
window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry");
window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton");
void on_def_groups_edit(GtkCellEditable *self, main_window *widgets){ g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userLoginEntry);
main_config.default_groups=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultGroupsEntry))); g_signal_connect(G_OBJECT(window->AdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userGroupsEntry);
g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),window->PasswordEntry);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
} }
void on_def_user_edit(GtkCellEditable *self, main_window *widgets){
main_config.default_user_name=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultUserNameEntry)));
}
void on_def_admin_edit(GtkWidget *self, main_window *widgets){ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(){
main_config.is_1000_administrator=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->MainDefaultUserAdministratorCheck)); ubl_settings_usergroups_group_window *window = malloc(sizeof(ubl_settings_usergroups_group_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group);
window->groupsAdmGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAdmGroupCheck");
window->groupsAudioGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAudioGroupCheck");
window->groupsAutologinGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAutologinGroupCheck");
window->groupsAvahiGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAvahiGroupCheck");
window->groupsBinGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBinGroupCheck");
window->groupsBrlapiGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBrlapiGroupCheck");
window->groupsBrittyGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBrittyGroupCheck");
window->groupsBumblbeeGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBumblbeeGroupCheck");
window->groupsChronyGroupCheck=yon_gtk_builder_get_widget(builder,"groupsChronyGroupCheck");
window->groupsClamavGroupCheck=yon_gtk_builder_get_widget(builder,"groupsClamavGroupCheck");
window->groupsCockpitWsGroupCheck=yon_gtk_builder_get_widget(builder,"groupsCockpitWsGroupCheck");
window->groupsCockpitWsinstanceGroupCheck=yon_gtk_builder_get_widget(builder,"groupsCockpitWsinstanceGroupCheck");
window->groupsColordGroupCheck=yon_gtk_builder_get_widget(builder,"groupsColordGroupCheck");
window->GroupsWindow=yon_gtk_builder_get_widget(builder,"GroupsWindow");
window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree");
window->GroupsCancelButton=yon_gtk_builder_get_widget(builder,"GroupsCancelButton");
window->GroupsOkButton=yon_gtk_builder_get_widget(builder,"GroupsOkButton");
g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
} }
void on_def_password_edit(GtkCellEditable *self, main_window *widgets){ void on_standard_groups_open(GtkWidget *self, main_window *widgets){
main_config.default_password=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultPasswordEntry))); ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new();
g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->GroupsWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->GroupsWindow);
} }
void on_root_password_edit(GtkCellEditable *self, main_window *widgets){
main_config.root_password=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainRootPasswordEntry)));
ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(){
ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password);
window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
} }
void on_hash_edit(GtkWidget *self, main_window *widgets){
main_config.hash_alg=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->MainPasswordHashCombo));
}
// standard functions ubl_settings_usergroups_system_window *yon_ubl_settings_usergroups_system_new(){
ubl_settings_usergroups_system_window *window = malloc(sizeof(ubl_settings_usergroups_system_window));
void config_init(){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_system);
main_config.always_open_documentation = 0; window->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
main_config.win_height = 0; window->liststore2=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2"));
main_config.win_width = 0; window->MonitorWindow=yon_gtk_builder_get_widget(builder,"MonitorWindow");
main_config.win_pos_x = 0; window->SettingsBar=yon_gtk_builder_get_widget(builder,"SettingsBar");
main_config.win_pos_y = 0; return window;
main_config.socket_id = -1;
main_config.save_socket_id = -1;
main_config.load_socket_id = -1;
main_config.lock_help = 0;
main_config.lock_help = 0;
main_config.lock_load_global = 0;
main_config.lock_save_global = 0;
main_config.lock_save_local = 0;
main_config.default_groups = NULL;
main_config.default_groups_config = NULL;
main_config.default_password = NULL;
main_config.default_user_name = NULL;
main_config.is_1000_administrator=0;
main_config.hash_alg=0;
main_config.root_password=NULL;
} }
main_window *setup_window(){ void on_settings_usergroups_system_open(GtkWidget *self, main_window *widgets){
/* Widgets getting | Получение виджетов */ ubl_settings_usergroups_system_window *window = yon_ubl_settings_usergroups_system_new();
main_window *widgets = malloc(sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow");
widgets->HatLabel = yon_gtk_builder_get_widget(builder,"headerTopic");
widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox");
widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"HeadOverlay");
widgets->HeadImage = yon_gtk_builder_get_widget(builder,"HeadBackgroundImage");
widgets->HeadBox = yon_gtk_builder_get_widget(builder,"HeaderBox");
widgets->HeadTitleLabel = yon_gtk_builder_get_widget(builder,"HeaderTitleLabel");
widgets->HeadInfoLabel = yon_gtk_builder_get_widget(builder,"HeaderInfoLabel");
widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox"); gtk_window_set_transient_for(GTK_WINDOW(window->MonitorWindow),GTK_WINDOW(widgets->Window));
widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon"); gtk_widget_show(window->MonitorWindow);
widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel"); }
widgets->SaveLabel = yon_gtk_builder_get_widget(builder,"headerSaveConfigLabel");
widgets->SaveMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalLocalConfigurationMenuItem");
widgets->SaveGlobalMenuItem = yon_gtk_builder_get_widget(builder,"SaveGlobalConfigurationMenuItem");
widgets->SaveLocalMenuItem = yon_gtk_builder_get_widget(builder,"SaveLocalConfigurationMenuItem");
widgets->RightBox = yon_gtk_builder_get_widget(builder,"HeaderRightBox");
widgets->LoadLabel = yon_gtk_builder_get_widget(builder,"headerLoadConfigLabel");
widgets->LoadGlobalMenuItem = yon_gtk_builder_get_widget(builder,"LoadGlobalConfigurationMenuItem"); ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem"); ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window));
widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox"); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_user);
window->CreateUserWindow=yon_gtk_builder_get_widget(builder,"CreateUserWindow");
widgets->DocumentationMenuItem = yon_gtk_builder_get_widget(builder,"DocumentationMenuItem"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
widgets->AboutMenuItem = yon_gtk_builder_get_widget(builder,"AboutMenuItem"); window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry");
widgets->MainAddUserButton = yon_gtk_builder_get_widget(builder,"MainAddUserButton"); window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry");
widgets->MainEditUserButton = yon_gtk_builder_get_widget(builder,"MainEditUserButton"); window->userPasswordCombo=yon_gtk_builder_get_widget(builder,"userPasswordCombo");
widgets->MainDeleteUserButton = yon_gtk_builder_get_widget(builder,"MainDeleteUserButton"); window->userPasswordEntry=yon_gtk_builder_get_widget(builder,"userPasswordEntry");
window->userPasswordButton=yon_gtk_builder_get_widget(builder,"userPasswordButton");
window->userUserNameEntry=yon_gtk_builder_get_widget(builder,"userUserNameEntry");
window->userGroupsCheck=yon_gtk_builder_get_widget(builder,"userGroupsCheck");
window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry");
window->UserGroupsButton=yon_gtk_builder_get_widget(builder,"UserGroupsButton");
window->userAdditionalGroupsEntry=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsEntry");
window->userAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsButton");
window->userPasswordChangedEntry=yon_gtk_builder_get_widget(builder,"userPasswordChangedEntry");
window->userPasswordExpirationEntry=yon_gtk_builder_get_widget(builder,"userPasswordExpirationEntry");
window->userPasswordExpirationButton=yon_gtk_builder_get_widget(builder,"userPasswordExpirationButton");
window->userPasswordChangeDelayMinimumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMinimumSpin");
window->userPasswordChangeDelayMaximumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMaximumSpin");
window->userWarningSpin=yon_gtk_builder_get_widget(builder,"userWarningSpin");
window->userActivitySpin=yon_gtk_builder_get_widget(builder,"userActivitySpin");
window->userForceChangeCheck=yon_gtk_builder_get_widget(builder,"userForceChangeCheck");
window->userShellCombo=yon_gtk_builder_get_widget(builder,"userShellCombo");
window->userShellEntry=yon_gtk_builder_get_widget(builder,"userShellEntry");
window->userHomeCombo=yon_gtk_builder_get_widget(builder,"userHomeCombo");
window->userHomeEntry=yon_gtk_builder_get_widget(builder,"userHomeEntry");
window->userHomeButton=yon_gtk_builder_get_widget(builder,"userHomeButton");
window->userCreateSystemCheck=yon_gtk_builder_get_widget(builder,"userCreateSystemCheck");
window->userCreateUnuniqueCheck=yon_gtk_builder_get_widget(builder,"userCreateUnuniqueCheck");
window->userDontCheckCheck=yon_gtk_builder_get_widget(builder,"userDontCheckCheck");
window->userSyncSAMBACheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck");
window->userDeactivatedCheck=yon_gtk_builder_get_widget(builder,"userDeactivatedCheck");
window->userExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry");
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
g_signal_connect(G_OBJECT(window->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry);
g_signal_connect(G_OBJECT(window->UserGroupsButton),"clicked",G_CALLBACK(on_groups_clicked),window->userGroupsEntry);
g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),window->userPasswordEntry);
g_signal_connect(G_OBJECT(window->userAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userAdditionalGroupsEntry);
g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window->userPasswordExpirationEntry);
return window;
}
void on_main_add(GtkWidget *self, main_window *widgets){
GtkTreeModel *model;
GtkWidget *cur_tree;
GtkTreeIter iter;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->UsersList);
ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateUserWindow);
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateGroupWindow);
}
}
void on_main_edit(GtkWidget *self, main_window *widgets){
GtkTreeModel *model;
GtkWidget *cur_tree;
GtkTreeIter iter;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->UsersList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){
ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateUserWindow);
}
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){
ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateGroupWindow);
}
}
}
void on_main_delete(GtkWidget *self, main_window *widgets){
GtkTreeModel *model;
GtkWidget *cur_tree;
GtkTreeIter iter;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->UsersList);
cur_tree=widgets->UsersTree;
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
cur_tree=widgets->GroupsTree;
}
if(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(cur_tree)),&model,&iter)){
gtk_list_store_remove(GTK_LIST_STORE(model),&iter);
}
}
/**config_init()
* [EN]
*
* [RU]
* Функция инициализации всех параметров конфигурации
*/
void config_init(){
main_config.always_open_documentation=0;
main_config.socket_id=-1;
main_config.save_socket_id=-1;
main_config.load_socket_id=-1;
main_config.lock_help=0;
main_config.lock_help=0;
main_config.lock_load_global=0;
main_config.lock_save_global=0;
main_config.lock_save_local=0;
}
/**yon_main_window_complete(main_window *widgets)
* [EN]
*
* [RU]
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"PlugBox"),1,1,0);
// Custom widgets configuration
widgets->MainEditGroupsButton = yon_gtk_builder_get_widget(builder,"MainEditGroupsButton"); widgets->CacheAlgList=GTK_LIST_STORE(gtk_builder_get_object(builder,"CacheAlgList"));
widgets->GroupsList=GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsList"));
widgets->MainDefaultGroupsEntry = yon_gtk_builder_get_widget(builder,"mainDefaultGroupsEntry"); widgets->UsersList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersList"));
widgets->MainDefaultUserNameEntry = yon_gtk_builder_get_widget(builder,"mainDefaultUserNameEntry"); widgets->PlugBox=yon_gtk_builder_get_widget(builder,"PlugBox");
widgets->MainDefaultUserAdministratorCheck = yon_gtk_builder_get_widget(builder,"mainDefaultUserAdministratorCheck"); widgets->button1=yon_gtk_builder_get_widget(builder,"button1");
widgets->MainDefaultPasswordEntry = yon_gtk_builder_get_widget(builder,"mainDefaultPasswordEntry"); widgets->button2=yon_gtk_builder_get_widget(builder,"button2");
widgets->MainRootPasswordEntry = yon_gtk_builder_get_widget(builder,"mainRootPasswordEntry"); widgets->button3=yon_gtk_builder_get_widget(builder,"button3");
widgets->MainUserTree = yon_gtk_builder_get_widget(builder,"mainUserTree"); widgets->AddButton=yon_gtk_builder_get_widget(builder,"AddButton");
widgets->MainPasswordHashCombo = yon_gtk_builder_get_widget(builder,"mainPasswordHashCombo"); widgets->EditButton=yon_gtk_builder_get_widget(builder,"EditButton");
widgets->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton");
main_config.usersListStore = GTK_LIST_STORE(gtk_builder_get_object(builder,"UserList")); widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton");
widgets->UsersTree=yon_gtk_builder_get_widget(builder,"UsersTree");
widgets->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree");
widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook");
main_config.usersListStore = GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersList"));
main_config.groupsListStore = GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsList"));
if (main_config.lock_load_global == 1){ if (main_config.lock_load_global == 1){
@ -419,117 +359,97 @@ main_window *setup_window(){
} }
/* Signal connection | Присоединение сигналов */ /* Signal connection | Присоединение сигналов */
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_main_add),widgets);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); g_signal_connect(G_OBJECT(widgets->EditButton),"clicked",G_CALLBACK(on_main_edit),widgets);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); g_signal_connect(G_OBJECT(widgets->DeleteButton),"clicked",G_CALLBACK(on_main_delete),widgets);
g_signal_connect(G_OBJECT(widgets->MainAddUserButton),"clicked",G_CALLBACK(on_user_add),widgets); g_signal_connect(G_OBJECT(widgets->button3),"clicked",G_CALLBACK(on_standard_groups_open),widgets);
g_signal_connect(G_OBJECT(widgets->MainEditUserButton),"clicked",G_CALLBACK(on_user_edit),NULL); g_signal_connect(G_OBJECT(widgets->button2),"clicked",G_CALLBACK(on_ubl_settings_usergroups_additional_settings_open),widgets);
g_signal_connect(G_OBJECT(widgets->MainDeleteUserButton),"clicked",G_CALLBACK(on_user_delete),NULL); g_signal_connect(G_OBJECT(widgets->button1),"clicked",G_CALLBACK(on_settings_usergroups_system_open),widgets);
g_signal_connect(G_OBJECT(widgets->MainEditGroupsButton),"clicked",G_CALLBACK(on_def_groups_open),widgets);
g_signal_connect(G_OBJECT(widgets->MainDefaultGroupsEntry),"changed",G_CALLBACK(on_def_groups_edit),widgets);
g_signal_connect(G_OBJECT(widgets->MainDefaultUserNameEntry),"changed",G_CALLBACK(on_def_user_edit),widgets);
g_signal_connect(G_OBJECT(widgets->MainDefaultUserAdministratorCheck),"toggled",G_CALLBACK(on_def_admin_edit),widgets);
g_signal_connect(G_OBJECT(widgets->MainDefaultPasswordEntry),"changed",G_CALLBACK(on_def_password_edit),widgets);
g_signal_connect(G_OBJECT(widgets->MainRootPasswordEntry),"changed",G_CALLBACK(on_root_password_edit),widgets);
g_signal_connect(G_OBJECT(widgets->MainPasswordHashCombo),"changed",G_CALLBACK(on_hash_edit),widgets);
gtk_widget_show(widgets->Window); gtk_widget_show(widgets->Window);
return widgets; }
}
int main(int argc, char *argv[]){
int main(int argc, char *argv[]){ local=setlocale(LC_ALL, "");
local=setlocale(LC_ALL, ""); textdomain (LocaleName);
textdomain (LocaleName); config_init();
config_init(); int option_index=0;
int option_index=0; int show_help=0;
int show_help=0; int debug_mode=0;
int debug_mode=0; {
{ struct option long_options[] = {
struct option long_options[] = { {"help", 0, 0, 'h'},
{"help", 0, 0, 'h'}, {"version", 0, 0, 'V'},
{"version", 0, 0, 'V'}, {"lock-help", 0,0, 1},
{"lock-help", 0,0, 1}, {"lock-save", 0,0, 2},
{"lock-save", 0,0, 2}, {"lock-save-local", 0,0, 3},
{"lock-save-local", 0,0, 3}, {"lock-save-global", 0,0, 4},
{"lock-save-global", 0,0, 4}, {"lock-load-global", 0,0, 5},
{"lock-load-global", 0,0, 5}, {"socket-id", 1, 0, 's'},
{"socket-id", 1, 0, 's'}, {"socket-ext-id", 1,0, 'e'},
{"socket-ext-id", 1,0, 'e'}, {"socket-trd-id", 1,0, 't'},
{"socket-trd-id", 1,0, 't'}, {"clear-config", 0,0, 'c'},
{"debug", 0,0, 'd'}, { NULL, 0, NULL, 0 }
{ NULL, 0, NULL, 0 } };
}; for (int i=0;i<argc;i++){
for (int i=0;i<argc;i++){ int argument=getopt_long(argc,argv,"hVvs:e:t:c",long_options,&option_index);
int argument=getopt_long(argc,argv,"hVvs:e:t:d",long_options,&option_index); switch(argument){
switch(argument){ case 'h':
case 'h': show_help=1;
show_help=1; break;
break; case 'v':
case 'v': case 'V':
case 'V': printf("%s\n",VERSION_LABEL);
printf("%s\n",VERSION_LABEL); exit(0);
exit(0); break;
break; case 's':
case 's': if(optarg)
if(optarg) main_config.socket_id=atoi(optarg);
main_config.socket_id=atoi(optarg); break;
break; case 'e':
case 'e': if(optarg)
if(optarg) main_config.save_socket_id=atoi(optarg);
main_config.load_socket_id=atoi(optarg); break;
break; case 't':
case 't': if(optarg)
if(optarg) main_config.load_socket_id=atoi(optarg);
main_config.save_socket_id=atoi(optarg); break;
break; case 'c': system(yon_char_unite("rm -rfd ", yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",NULL));
case 1: break;
main_config.lock_help=1; case 1:
break; main_config.lock_help=1;
case 2: break;
main_config.lock_save_local=1; case 2:
main_config.lock_save_global=1; main_config.lock_save_local=1;
break; main_config.lock_save_global=1;
case 3: break;
main_config.lock_save_local=1; case 3:
break; main_config.lock_save_local=1;
case 4: break;
main_config.lock_save_global=1; case 4:
break; main_config.lock_save_global=1;
case 5: break;
main_config.lock_load_global=1; case 5:
break; main_config.lock_load_global=1;
} break;
} }
if (show_help==1&&main_config.lock_help!=1){ }
printf("%s\n",HELP_LABEL); if (show_help==1&&main_config.lock_help!=1){
exit(0); printf("%s\n",HELP_LABEL);
} exit(0);
} }
}
if (getuid()!=0){
main_config.lock_load_global=1; if (getuid()!=0){
main_config.lock_save_global=1; main_config.lock_load_global=1;
main_config.lock_save_local=1; main_config.lock_save_global=1;
} main_config.lock_save_local=1;
gtk_init(&argc,&argv); }
gtk_init(&argc,&argv);
yon_ubl_connect_config((_template_config*)&main_config);
main_window *widgets = setup_window(); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path); template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel); gtk_main();
if (getuid()!=0)
yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
else
yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id);
yon_window_config_setup(GTK_WINDOW(widgets->Window));
yon_window_config_load(config_path);
GtkCssProvider *css=gtk_css_provider_new();
gtk_css_provider_load_from_resource(css,CssPath);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(css),
-1);
gtk_main();
} }

@ -1,190 +1,243 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gtk/gtkx.h> #include <gtk/gtkx.h>
#include "ubl-utils.h" #include <locale.h>
#include <locale.h> #include <stdio.h>
#include <stdio.h> #include <unistd.h>
#include <unistd.h> #include <stdlib.h>
#include <stdlib.h> #include <libintl.h>
#include <libintl.h> #include <getopt.h>
#include <getopt.h> #include <libintl.h>
#include <libintl.h> #include <ubl-utils.h>
#include "../compile/ubl-cmake.h" #include <ublsettings-ui.h>
#ifdef WEBKIT_FOUND #include "../compile/ubl-cmake.h"
#include <webkit2/webkit2.h> #ifdef WEBKIT_FOUND
#endif #include <webkit2/webkit2.h>
#include "ubl-strings.h" #endif
#include "ubl-strings.h"
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-usergroups"
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-usergroups"
#define _(String) gettext(String)
#define _(String) gettext(String)
#define glade_path "/com/ublinux/ui/ubl-settings-usergroups.glade" #define glade_path "/com/ublinux/ui/ubl-settings-usergroups.glade"
#define glade_user_path "/com/ublinux/ui/ubl-settings-usergroups-user.glade" #define glade_path_ubl_settings_usergroups_additional_settings "/com/ublinux/ui/ubl-settings-usergroups-additional-settings.glade"
#define glade_groups_path "/com/ublinux/ui/ubl-settings-usergroups-group.glade" #define glade_path_ubl_settings_usergroups_group_creation "/com/ublinux/ui/ubl-settings-usergroups-group-creation.glade"
#define glade_path_ubl_settings_usergroups_group "/com/ublinux/ui/ubl-settings-usergroups-group.glade"
#define glade_path_ubl_settings_usergroups_password "/com/ublinux/ui/ubl-settings-usergroups-password.glade"
#define glade_path_ubl_settings_usergroups_system "/com/ublinux/ui/ubl-settings-usergroups-system.glade"
#define glade_path_ubl_settings_usergroups_user "/com/ublinux/ui/ubl-settings-usergroups-user.glade"
#define banner_path "/com/ublinux/images/ubl-settings-usergroups-banner.png" #define banner_path "/com/ublinux/images/ubl-settings-usergroups-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-usergroups.css" #define CssPath "/com/ublinux/css/ubl-settings-usergroups.css"
#define config_path yon_char_unite("/home/",yon_ubl_root_user_get(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define yon_col(mean) yon_char_append(mean,":") #define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-usergroups"
#define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-usergroups" #define clear_config_both_command "ubconfig remove TEMP_SECTION TEMP_PATAMETER"
typedef char* string; #define clear_config_global_command "ubconfig --target global remove TEMP_SECTION TEMP_PATAMETER"
#define clear_config_local_command "ubconfig --target system remove TEMP_SECTION TEMP_PATAMETER"
typedef char* string;
string version_application; string version_application;
char *local; char *local;
typedef struct { typedef struct {
int always_open_documentation; // Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT {
int win_pos_x; int socket_id;
int win_pos_y; int load_socket_id;
int win_width; int save_socket_id;
int win_height;
int lock_help;
int socket_id; int lock_save_local;
int load_socket_id; int lock_save_global;
int save_socket_id; int lock_load_global;
int lock_help; int always_open_documentation;
int lock_save_local; // } Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT
int lock_save_global; // Type custom parameters below: :
int lock_load_global;
// Custom
char *default_groups;
char *default_user_name;
char *default_password;
char *root_password;
int hash_alg;
gboolean is_1000_administrator;
struct groups_config *default_groups_config;
GtkListStore *usersListStore; GtkListStore *usersListStore;
} config; GtkListStore *groupsListStore;
typedef struct { } config;
GtkWidget *Window;
GtkWidget *HatLabel; typedef struct {
GtkWidget *PlugBox; // Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT {
GtkWidget *Window;
GtkWidget *HeadOverlay; GtkWidget *HeadLabel;
GtkWidget *HeadImage; GtkWidget *PlugBox;
GtkWidget *HeadBox;
GtkWidget *HeadTitleLabel; GtkWidget *HeadOverlay;
GtkWidget *HeadInfoLabel; GtkWidget *HeadImage;
GtkWidget *HeadBox;
GtkWidget *StatusBox; GtkWidget *HeadTitleLabel;
GtkWidget *StatusIcon; GtkWidget *HeadInfoLabel;
GtkWidget *StatusLabel;
GtkWidget *StatusBox;
GtkWidget *SaveLabel; GtkWidget *StatusIcon;
GtkWidget *SaveMenuItem; GtkWidget *StatusLabel;
GtkWidget *SaveGlobalMenuItem;
GtkWidget *SaveLocalMenuItem; GtkWidget *SaveMenuItem;
GtkWidget *RightBox; GtkWidget *SaveGlobalMenuItem;
GtkWidget *SaveLocalMenuItem;
GtkWidget *LoadLabel; GtkWidget *RightBox;
GtkWidget *LoadGlobalMenuItem;
GtkWidget *LoadLocalMenuItem; GtkWidget *LoadGlobalMenuItem;
GtkWidget *LeftBox; GtkWidget *LoadLocalMenuItem;
GtkWidget *LeftBox;
GtkWidget *DocumentationMenuItem;
GtkWidget *AboutMenuItem; GtkWidget *DocumentationMenuItem;
// Custom GtkWidget *AboutMenuItem;
GtkWidget *MainAddUserButton;
GtkWidget *MainEditUserButton; GtkWidget *InterfaceBox;
GtkWidget *MainDeleteUserButton; // } Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT
// Type custom parameters below:
GtkWidget *MainEditGroupsButton; GtkListStore *CacheAlgList;
GtkListStore *GroupsList;
GtkWidget *MainDefaultGroupsEntry; GtkListStore *UsersList;
GtkWidget *MainDefaultUserNameEntry; GtkWidget *button1;
GtkWidget *MainDefaultUserAdministratorCheck; GtkWidget *button2;
GtkWidget *MainDefaultPasswordEntry; GtkWidget *button3;
GtkWidget *MainRootPasswordEntry; GtkWidget *AddButton;
GtkWidget *MainPasswordHashCombo; GtkWidget *EditButton;
GtkWidget *DeleteButton;
GtkWidget *MainUserTree; GtkWidget *UpdateButton;
GtkWidget *UsersTree;
} main_window; GtkWidget *GroupsTree;
GtkWidget *MainNotebook;
typedef struct {
gboolean adm; } main_window;
gboolean audio;
gboolean autologin;
gboolean avahi; typedef struct {
gboolean bin; GtkWidget *Window;
gboolean brlapi;
gboolean britty; GtkWidget *AlwaysOpenCheck;
gboolean bumblbee;
gboolean chrony; GtkWidget *CloseButton;
gboolean clamav; GtkWidget *AcceptButton;
gboolean cockpit_ws; } documentation_confirmation_window;
gboolean cockpit_wsinstance;
gboolean colord; typedef struct{
} groups_config; GtkWidget *Window;
GtkWidget *StatusBox;
typedef struct { GtkWidget *DefaultUserNameEntry;
GtkWidget *Window; GtkWidget *DefaultUserAdministratorCheck;
GtkWidget *DefaultPasswordCombo;
GtkWidget *HatText; GtkWidget *DefaultPasswordEntry;
GtkWidget *HeaderText; GtkWidget *RootPasswordCombo;
GtkWidget *InfoText; GtkWidget *RootPasswordEntry;
GtkWidget *AlwaysOpenCheck; GtkWidget *PasswordHashCombo;
GtkWidget *CancelButton;
GtkWidget *CloseButton; GtkWidget *AcceptButton;
GtkWidget *AcceptButton; } ubl_settings_usergroups_additional_settings_window;
} documentation_confirmation_window;
typedef struct{
typedef struct { GtkWidget *CreateGroupWindow;
GtkWidget *Window; GtkWidget *StatusBox;
GtkWidget *GroupsCancelButton; GtkWidget *userUIDAutoCheck;
GtkWidget *GroupsOkButton; GtkWidget *userUIDEntry;
GtkWidget *userLoginEntry;
GtkWidget *GroupsAdmCheck; GtkWidget *userGroupsEntry;
GtkWidget *GroupsAudioCheck; GtkWidget *UserAdditionalGroupsButton;
GtkWidget *GroupsAutologinCheck; GtkWidget *UserCancelButton;
GtkWidget *GroupsAvahiCheck; GtkWidget *UserOkButton;
GtkWidget *GroupsBinCheck; GtkWidget *AdditionalGroupsButton;
GtkWidget *GroupsBrlapiCheck; GtkWidget *UnuniqueGIDCheck;
GtkWidget *GroupsBrittyCheck; GtkWidget *SystemGroupCheck;
GtkWidget *GroupsBumblbeeCheck; GtkWidget *PasswordCombo;
GtkWidget *GroupsChronyCheck; GtkWidget *PasswordEntry;
GtkWidget *GroupsClamavCheck; GtkWidget *ChangePasswordButton;
GtkWidget *GroupsCockpitWsCheck; } ubl_settings_usergroups_group_creation_window;
GtkWidget *GroupsCockpitWsinstanceCheck;
GtkWidget *GroupsColordCheck; typedef struct{
} groups_window; GtkWidget *groupsAdmGroupCheck;
GtkWidget *groupsAudioGroupCheck;
typedef struct { GtkWidget *groupsAutologinGroupCheck;
int uid; GtkWidget *groupsAvahiGroupCheck;
gboolean uid_default; GtkWidget *groupsBinGroupCheck;
char *username; GtkWidget *groupsBrlapiGroupCheck;
char *login; GtkWidget *groupsBrittyGroupCheck;
char *password; GtkWidget *groupsBumblbeeGroupCheck;
gboolean password_default; GtkWidget *groupsChronyGroupCheck;
char *main_group; GtkWidget *groupsClamavGroupCheck;
struct groups_config *additional_groups; GtkWidget *groupsCockpitWsGroupCheck;
int password_hash; GtkWidget *groupsCockpitWsinstanceGroupCheck;
gboolean sync_SAMBA; GtkWidget *groupsColordGroupCheck;
char *extra_options; GtkWidget *GroupsWindow;
} user_config; GtkWidget *GroupsTree;
GtkWidget *GroupsCancelButton;
typedef struct { GtkWidget *GroupsOkButton;
GtkWidget *Window; } ubl_settings_usergroups_group_window;
GtkWidget *UserAdditionalGroupsButton;
GtkWidget *UserCancelButton; typedef struct{
GtkWidget *UserOkButton; GtkWidget *CreateGroupWindow;
GtkWidget *StatusBox;
GtkWidget *UserUIDAutoCheck; GtkWidget *UserCancelButton;
GtkWidget *UserUIDEntry; GtkWidget *UserOkButton;
GtkWidget *userUserNameEntry; } ubl_settings_usergroups_password_window;
GtkWidget *userLoginEntry;
GtkWidget *userPasswordDefaultCheck; typedef struct{
GtkWidget *userPasswordEntry; GtkListStore *liststore1;
GtkWidget *userGroupsEntry; GtkListStore *liststore2;
GtkWidget *userPasswordHashAlgorithmCombo; GtkWidget *MonitorWindow;
GtkWidget *userSyncSAMBACheck; GtkWidget *SettingsBar;
GtkWidget *userExtraOptionsEntry; } ubl_settings_usergroups_system_window;
} user_window;
typedef struct{
main_window *setup_window(); GtkWidget *CreateUserWindow;
GtkWidget *StatusBox;
GtkWidget *userUIDAutoCheck;
GtkWidget *userUIDEntry;
GtkWidget *userLoginEntry;
GtkWidget *userPasswordCombo;
GtkWidget *userPasswordEntry;
GtkWidget *userPasswordButton;
GtkWidget *userUserNameEntry;
GtkWidget *userGroupsCheck;
GtkWidget *userGroupsEntry;
GtkWidget *UserGroupsButton;
GtkWidget *userAdditionalGroupsEntry;
GtkWidget *userAdditionalGroupsButton;
GtkWidget *userPasswordChangedEntry;
GtkWidget *userPasswordExpirationEntry;
GtkWidget *userPasswordExpirationButton;
GtkWidget *userPasswordChangeDelayMinimumSpin;
GtkWidget *userPasswordChangeDelayMaximumSpin;
GtkWidget *userWarningSpin;
GtkWidget *userActivitySpin;
GtkWidget *userForceChangeCheck;
GtkWidget *userShellCombo;
GtkWidget *userShellEntry;
GtkWidget *userHomeCombo;
GtkWidget *userHomeEntry;
GtkWidget *userHomeButton;
GtkWidget *userCreateSystemCheck;
GtkWidget *userCreateUnuniqueCheck;
GtkWidget *userDontCheckCheck;
GtkWidget *userSyncSAMBACheck;
GtkWidget *userDeactivatedCheck;
GtkWidget *userExtraOptionsEntry;
GtkWidget *UserCancelButton;
GtkWidget *UserOkButton;
} ubl_settings_usergroups_user_window;
ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new();
void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets);
ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new();
ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new();
void on_standard_groups_open(GtkWidget *self, main_window *widgets);
ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new();
ubl_settings_usergroups_system_window *yon_ubl_settings_usergroups_system_new();
void on_settings_usergroups_system_open(GtkWidget *self, main_window *widgets);
ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new();

@ -4,39 +4,6 @@
#define TITLE_LABEL _("Users and groups") #define TITLE_LABEL _("Users and groups")
#define TITLE_INFO_LABEL _("System users and groups configuration") #define TITLE_INFO_LABEL _("System users and groups configuration")
#define SUCCESS_LABEL _("Operation succeeded")
#define ROOT_WARNING_LABEL _("Warning! Application was launched without root - root-dependent actions are locked")
#define ABOUT_LABEL _("About")
#define DOCUMENTATION_LABEL _("Documentation")
#define SAVE_LOCAL_LABEL _("Save to local configuration")
#define SAVE_GLOBAL_LABEL _("Save to global configuration")
#define SAVE_CONFIGURATION_LABEL _("Save configuration")
#define SAVE_LABEL _("Save")
#define LOAD_LOCAL_LABEL _("Load local configuration")
#define LOAD_GLOBAL_LABEL _("Load global configuration")
#define LOAD_LABEL _("Load")
#define CANCEL_LABEL _("Cancel")
#define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?")
#define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.")
#define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation")
#define OPEN_HELP_LABEL _("Open documentation")
#define PROJECT_HOME_LABEL _("Project Home Page")
#define NOTHING_CHOSEN_LABEL _("Nothing were chosen")
#define GLOBAL_LOAD_SUCCESS_LABEL _("Global configuration loading succseeded.")
#define LOCAL_LOAD_SUCCESS_LABEL _("Local configuration loading succseeded.")
#define LOAD_FAILED_LABEL _("Config loading failed")
#define GLOBAL_LOCAL_SAVE_SUCCESS_LABEL _("Local and global configuration saving succseeded.")
#define GLOBAL_SAVE_SUCCESS_LABEL _("Global configuration saving succseeded.")
#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succseeded.")
#define DEFAULT_USER_GROUPS_LABEL _("Default user groups:") #define DEFAULT_USER_GROUPS_LABEL _("Default user groups:")
#define DEFAULT_USER_NAME_LABEL _("Default user name (if there's no another):") #define DEFAULT_USER_NAME_LABEL _("Default user name (if there's no another):")
#define USER_1000_IS_ADMIN_LABEL _("User with ID 1000 is administrator") #define USER_1000_IS_ADMIN_LABEL _("User with ID 1000 is administrator")
@ -58,4 +25,65 @@
#define ADDITIONAL_GROUPS_USER_LABEL _("Additional groups") #define ADDITIONAL_GROUPS_USER_LABEL _("Additional groups")
#define PASSWORD_HASH_USER_LABEL _("Password hash algorythm:") #define PASSWORD_HASH_USER_LABEL _("Password hash algorythm:")
#define SYNC_SAMBA_USER_LABEL _("Sync with SAMBA user") #define SYNC_SAMBA_USER_LABEL _("Sync with SAMBA user")
#define EXTRA_OPTIONS_USER_LABEL _("Extra options:") #define EXTRA_OPTIONS_USER_LABEL _("Extra options:")
#define CANCEL_LABEL _("Cancel")
#define OK_LABEL _("Ok")
#define BLOCK_LABEL _("Block")
#define MAIN_GROUP_LABEL _("Main group")
#define ADDITIONAL_PARAMETERS_LABEL _("Additional parameters")
#define PASSWORD_STATUS_LABEL _("Password status")
#define USERS_LABEL _("Users")
#define GID_LABEL _("GID")
#define GROUP_NAME_LABEL _("Group name")
#define GROUPS_USERS_LABEL _("Group users")
#define GROUPS_LABEL _("Groups")
//ubl-settings-usergroups-additional-settings.glade
#define SET_PASSWORD_LABEL _("Set a password")
#define ENDRYPTED_LABEL _("Endrypted password")
#define MD5_LABEL "md5"
#define YESCRYPT_LABEL "yescrypt"
#define NO_PASSWORD_LABEL _("No password required")
#define SCRYPT_LABEL "scrypt"
#define BF_LABEL "bf"
#define BCRYPT_LABEL "bcrypt"
#define SHA512_LABEL "sha512crypt"
#define SHA256_LABEL "sha256crypt"
#define SUNMD_LABEL "sunmd5"
#define MD5CRYPT_LABEL "md5crypt"
#define BSDICRYPT_LABEL "bsdicrypt"
#define DESCTRYPT_LABEL "desctrypt"
#define NT_LABEL "nt"
#define ACCEPT_LABEL _("Accept")
//ubl-settings-usergroups-group-creation.glade
#define AUTOMATICALLY_LABEL _("Automatically")
#define LOGIN_GROUP_LABEL _("login")
#define CREATE_GROUP_UNUNIQUE_LABEL _("Create group with ununique GID")
#define CREATE_SYSTEM_GROUP_LABEL _("Create system group")
#define ENCRYPTED_PASSWORD_LABEL _("Encrypted password")
#define ADDITIONAL_CONFIGURATION_LABEL _("Additional configuration")
//ubl-settings-usergroups-group.glade
#define ADM_LABEL "adm"
#define AUDIO_LABEL "audio"
#define AUTOLIGIN_LABEL "autologin"
#define AVAHI_LABEL "avahi"
#define BIN_LABEL "bin"
#define BRLAPI_LABEL "brlapi"
#define BRITTY_LABEL "britty"
#define BUMBLBEE_LABEL "bumblbee"
#define CHRONY_LABEL "chrony"
#define CLAMAV_LABEL "clamav"
#define COLORD_LABEL "colord"
//ubl-settings-usergroups-system.glade
#define BLOCKED_LABEL _("Blocked")
#define USERNAME_LABEL _("Username")
#define PRIMARY_GROUP_LABEL _("Primary group")
#define HOME_DIRECTORY_LABEL _("Home directory")
#define GROUP_LABEL _("Group")
#define GROUP_LABEL _("Group")
#define GROUP_LABEL _("Group")

File diff suppressed because it is too large Load Diff

@ -1,340 +0,0 @@
#ifndef UBL_UTILS
#define UBL_UTILS
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <pthread.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <locale.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include "../compile/ubl-cmake.h"
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
#define DesktopPath "/usr/share/applications/"
#define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next)
#define new(type) malloc(sizeof(type))
#define new_arr(type,size) malloc(sizeof(type)*size)
#define get_pkexec_user_command "getent passwd $PKEXEC_UID | cut -d: -f1"
typedef enum
{
#ifdef __GTK_H__
DICTIONARY_GTK_WIDGETS_TYPE,
#endif
DICTIONARY_OTHER_TYPE=0,
DICTIONARY_CHAR_TYPE,
DICTIONARY_INT_TYPE,
DICTIONARY_BOOL_TYPE,
} DICT_TYPE;
typedef struct dictionary
{
char *key;
void *data;
struct dictionary *next;
struct dictionary *prev;
struct dictionary *first;
DICT_TYPE data_type;
int flag1;
} dictionary;
typedef struct apps
{
char *Name;
int Type;
char *Categories;
char *Exec;
char *Icon;
int Pluggable;
int DualPluggable;
} apps;
typedef char** config_str;
static dictionary *__yon__config__strings = NULL;
#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE)
#define config(key) yon_config_get_by_key(key)
#define for_config dictionary temp = NULL; for_dictionary(temp,__yon__config__strings)
#define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size)
// dictionary functions
/**yon_dictionary_get_data(dictionary, type)
* [EN]
* Gets data from dictionary.
* [dictionary] is dictionary, from which data should be extracted;
* [type] is type of data, [dictionary] contains.
* [RU]
* Возвращает данные из словаря.
* [dictionary] - словарь из которого достаются данные.
* [type] - тип данных, хранящихся в словаре [dictionary].
*/
#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data)
/**yon_dictionary_add_or_create_if_exists_with_data(dict,key,data)
* [EN]
*
* [RU]
* Добавляет элемент словаря в конец словаря [dict] c ключом [key] и данными [data].
* Если словарь не существует, создаёт его
*/
#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_new_with_data(key,data); \
else dict=yon_dictionary_append_with_data(dict,key,data);}
dictionary *yon_dictionary_new();
dictionary *yon_dictionary_append(dictionary *targetdict);
dictionary *yon_dictionary_get_last(dictionary *dict);
dictionary *yon_dictionary_swap(dictionary *dict, int aim);
void yon_dictionary_make_first(dictionary *dict);
void yon_dictionary_make_nth(dictionary *dict, int nth);
dictionary *yon_dictionary_new_with_data(char *key, void *data);
dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data);
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect);
dictionary *yon_dictionary_get(dictionary **dict, char *key);
dictionary *yon_dictionary_rip(dictionary *dict);
dictionary *yon_dictionary_get_nth(dictionary *dict, int place);
void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*));
// char functions
char *yon_char_append(char *source, char *append);
char *yon_char_new(char *chr);
char *yon_char_unite(char *source, ...);
char *yon_cut(char *source, int size, int startpos);
char *yon_char_divide(char *source, int dividepos);
char *yon_char_divide_search(char *source, char *dividepos, int delete_divider);
char *yon_char_from_int(int int_to_convert);
char *yon_char_replace(char *source, char *find, char*replace);
char **yon_char_parse(char *parameters, int *size, char *divider);
char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete);
int yon_char_parsed_check_exist(char **parameters, int size, char *param);
int yon_char_find_count(char *source, char *find);
int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size);
config_str yon_char_parsed_new (int *size, ...);
void yon_char_parsed_copy(config_str *source, config_str *to_copy);
config_str yon_char_parsed_append(config_str parsed, int *size, char *string);
int yon_ubl_check_root();
char *yon_ubl_root_user_get();
// parsing functions
config_str philos_list_user(int* size);
apps *yon_apps_scan_and_parse_desktops(int *sizef);
void yon_apps_sort(apps *applist, int size);
apps *yon_apps_get_by_name(apps *applist, char *name, int size);
config_str yon_config_load(char *command, int *str_len);
int yon_config_save(char *command);
char *yon_config_get_parameter(config_str parameters, int size, char *param);
int yon_config_load_register(char *command);
int yon_config_remove_by_key(char *key);
int yon_config_remove_by_data(void *data);
int yon_config_remove_element(char *key, char *deleted);
void *yon_config_get_by_key(char *key);
char *yon_config_get_key_by_data(char *data);
int yon_config_set(char *key, void *data);
int yon_config_clean();
void yon_config_register(char *key, void *data);
config_str yon_config_get_all();
// terminal-using functions
int yon_launch_app_with_arguments(char *name, char *args);
void yon_launch(char *command);
// Gtk functions
#ifdef __GTK_H__
#ifdef VTE_TERMINAL
void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument);
void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument);
#endif
/**yon_gtk_builder_get_widget(builder, widget_name)
* [EN]
* Returns GtkWidget from GtkBuilder *[builder].
* [builder] is GtkBuilder*;
* [widget_name] is id of widget;
*/
#define yon_gtk_builder_get_widget(builder, widget_name) GTK_WIDGET(gtk_builder_get_object(builder, widget_name))
typedef struct
{
GtkWidget *Icon;
GtkWidget *Label;
GtkWidget *IconView;
GtkListStore *List;
} expander_icon_view;
void yon_window_config_setup(GtkWindow *window);
int yon_window_config_load(char *path);
int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size);
int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find);
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
typedef enum
{
BACKGROUND_IMAGE_SUCCESS_TYPE,
BACKGROUND_IMAGE_FAIL_TYPE
} BACKGROUND_IMAGE_TYPE;
typedef struct {
BACKGROUND_IMAGE_TYPE type;
GtkWidget *icon;
GtkWidget *box;
GtkWidget *label;
char* text_to_render;
} render_data;
/**yon_ubl_status_box_setup(render,icon,box,label)
* [EN]
* Sets up [render] structure of type render_data.
* [icon] is GtkImage widget of status box for showing status icons;
* [box] is GtkBox widget of status box for showing status color;
* [label] is GtkLabel widget of status box for showing status text;
* [RU]
* Настраивает структуру [render] типа render_data.
* [icon] - виджет типа GtkIcon в котором будут отображаться статусные иконки;
* [box] - виджет типа GtkBox в котором будет отображаться цвет статуса;
* [label] - виджет типа GtkLabel в котором будет отображаться текст статусного сообщения;
*/
int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label);
/**yon_ubl_status_box_render(render,text,type)
* [EN]
* Renders message in status box;
* [render] is render_data structure of status box;
* [text] is text to be shown in status box;
* [type] if type of message. Can be BACKGROUND_IMAGE_FAIL_TYPE or BACKGROUND_IMAGE_SUCCESS_TYPE
* [RU]
* Отображает сообщение в статусном окне.
* [render] - структура типа render_data для нужного статусного окна;
* [text] - текст, отображаемый в статусном окне;
* [type] - тип сообщения. Может быть:
* BACKGROUND_IMAGE_FAIL_TYPE (красный фон,иконка - восклицательный знак)
* или
* BACKGROUND_IMAGE_SUCCESS_TYPE (Жёлтный фон, иконка - галка)
*/
void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type);
#ifdef __cplusplus
/**yon_ubl_header_setup(overlay, head, image, imag_path)
* [EN]
* Sets up header of app.
* [overlay] is overlay for app header;
* [head] is box of header, which connects to [overlay]
* [image] is header background image;
* [imag_path] is path of image, shown in [image]
* [RU]
* Настраивает заголовок приложения.
* [overlay] - оверлей заголовка приложения;
* [head] - шапка заголовка, присоединяемая к [overlay]
* [image] - виджет картинки для заднего фона;
* [imag_path] - путь до картинки, загружаемой в [image]
*/
#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay.gobj()), GTK_WIDGET(head.gobj()), GTK_WIDGET(image.gobj()), (char *)imag_path)
#else
/**yon_ubl_header_setup(overlay, head, image, imag_path)
* [EN]
* Sets up header of app.
* [overlay] is overlay for app header;
* [head] is box of header, which connects to [overlay]
* [image] is header background image;
* [imag_path] is path of image, shown in [image]
* [RU]
* Настраивает заголовок приложения.
* [overlay] - оверлей заголовка приложения;
* [head] - шапка заголовка, присоединяемая к [overlay]
* [image] - виджет картинки для заднего фона;
* [imag_path] - путь до картинки, загружаемой в [image]
*/
#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path)
#define yon_ubl_header_setup_resource(overlay, head, image, imag_path) _yon_ubl_header_setup_resource(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path)
#endif
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id);
#ifdef WEBKIT_FOUND
void yon_ubl_browser_window_open(char *link, char *browser_window_name);
#else
void yon_ubl_browser_window_open(char *link, char *browser_window_name);
#endif
#endif
#endif

@ -0,0 +1,373 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.cancel-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="Window">
<property name="width-request">600</property>
<property name="height-request">350</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user name (if there's no another):</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="DefaultUserNameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.profile-symbolic</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="DefaultUserAdministratorCheck">
<property name="label" translatable="yes">User with ID 1000 is administrator</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="DefaultPasswordCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">No password required</item>
<item translatable="yes">Set a password</item>
<item translatable="yes">Endrypted password</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="DefaultPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.key-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Root user password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="RootPasswordCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">No password required</item>
<item translatable="yes">Set a password</item>
<item translatable="yes">Encrypted password</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="RootPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.key-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Password hash algorythm:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="PasswordHashCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">md5</item>
<item translatable="yes">yescrypt</item>
<item translatable="yes">ghost-yescrypt</item>
<item translatable="yes">scrypt</item>
<item translatable="yes">bf</item>
<item translatable="yes">bcrypt</item>
<item translatable="yes">bcrypt-a</item>
<item translatable="yes">sha512crypt</item>
<item translatable="yes">sha256crypt</item>
<item translatable="yes">sunmd5</item>
<item translatable="yes">md5crypt</item>
<item translatable="yes">bsdicrypt</item>
<item translatable="yes">desctrypt</item>
<item translatable="yes">nt</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AcceptButton">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label2"/>
<widget name="label4"/>
<widget name="label1"/>
</widgets>
</object>
</interface>

@ -0,0 +1,429 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.profile-settings-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.edit-symbolic</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.cancel-symbolic</property>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="CreateGroupWindow">
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default-width">450</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Group Id:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="GIDAutoCheck">
<property name="label" translatable="yes">Automatically</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userUIDEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="placeholder-text" translatable="yes">1007</property>
<property name="input-purpose">number</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Group name:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userLoginEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.profile-symbolic</property>
<property name="placeholder-text" translatable="yes">login</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Group users:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userGroupsEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AdditionalGroupsButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="spacing">5</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkButton" id="UserCancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkCheckButton" id="UnuniqueGIDCheck">
<property name="label" translatable="yes">Create group with ununique GID</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="SystemGroupCheck">
<property name="label" translatable="yes">Create system group</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Password:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="PasswordCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">No password required</item>
<item translatable="yes">Set a password</item>
<item translatable="yes">Encrypted password</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="PasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.key-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="ChangePasswordButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Additional configuration</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="userTitleNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label1"/>
<widget name="label3"/>
<widget name="label5"/>
</widgets>
</object>
</interface>

@ -2,17 +2,207 @@
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups"> <interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="groupsAdmGroupCheck">
<property name="label" translatable="yes">adm</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsAudioGroupCheck">
<property name="label" translatable="yes">audio</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsAutologinGroupCheck">
<property name="label" translatable="yes">autologin</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsAvahiGroupCheck">
<property name="label" translatable="yes">avahi</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBinGroupCheck">
<property name="label" translatable="yes">bin</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBrlapiGroupCheck">
<property name="label" translatable="yes">brlapi</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBrittyGroupCheck">
<property name="label" translatable="yes">britty</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBumblbeeGroupCheck">
<property name="label" translatable="yes">bumblbee</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsChronyGroupCheck">
<property name="label" translatable="yes">chrony</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsClamavGroupCheck">
<property name="label" translatable="yes">clamav</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">9</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsCockpitWsGroupCheck">
<property name="label" translatable="yes">cockpit-ws</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">10</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsCockpitWsinstanceGroupCheck">
<property name="label" translatable="yes">cockpit-wsinstance</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">11</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsColordGroupCheck">
<property name="label" translatable="yes">colord</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">12</property>
</packing>
</child>
</object>
<object class="GtkImage" id="image5"> <object class="GtkImage" id="image5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property> <property name="icon-name">com.ublinux.ubl-settings-usergroups.cancel-symbolic</property>
</object> </object>
<object class="GtkImage" id="image6"> <object class="GtkImage" id="image6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property> <property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object> </object>
<object class="GtkApplicationWindow" id="GroupsWindow"> <object class="GtkApplicationWindow" id="GroupsWindow">
<property name="width-request">250</property>
<property name="height-request">385</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="resizable">False</property> <property name="resizable">False</property>
<property name="modal">True</property> <property name="modal">True</property>
@ -28,193 +218,41 @@
<property name="margin-top">5</property> <property name="margin-top">5</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">10</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="orientation">vertical</property> <property name="shadow-type">in</property>
<child>
<object class="GtkCheckButton" id="groupsAdmGroupCheck">
<property name="label" translatable="yes">adm</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsAudioGroupCheck">
<property name="label" translatable="yes">audio</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsAutologinGroupCheck">
<property name="label" translatable="yes">autologin</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsAvahiGroupCheck">
<property name="label" translatable="yes">avahi</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBinGroupCheck">
<property name="label" translatable="yes">bin</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child> <child>
<object class="GtkCheckButton" id="groupsBrlapiGroupCheck"> <object class="GtkTreeView" id="GroupsTree">
<property name="label" translatable="yes">brlapi</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">False</property> <child internal-child="selection">
<property name="draw-indicator">True</property> <object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<child>
<object class="GtkCellRendererToggle"/>
<attributes>
<attribute name="active">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBrittyGroupCheck">
<property name="label" translatable="yes">britty</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsBumblbeeGroupCheck">
<property name="label" translatable="yes">bumblbee</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsChronyGroupCheck">
<property name="label" translatable="yes">chrony</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsClamavGroupCheck">
<property name="label" translatable="yes">clamav</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">9</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsCockpitWsGroupCheck">
<property name="label" translatable="yes">cockpit-ws</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">10</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsCockpitWsinstanceGroupCheck">
<property name="label" translatable="yes">cockpit-wsinstance</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">11</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="groupsColordGroupCheck">
<property name="label" translatable="yes">colord</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">12</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -227,7 +265,8 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">30</property> <property name="halign">end</property>
<property name="spacing">5</property>
<property name="homogeneous">True</property> <property name="homogeneous">True</property>
<child> <child>
<object class="GtkButton" id="GroupsCancelButton"> <object class="GtkButton" id="GroupsCancelButton">
@ -278,7 +317,7 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="show-close-button">True</property> <property name="show-close-button">True</property>
<child type="title"> <child type="title">
<object class="GtkLabel" id="groupsTitleLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property> <property name="label" translatable="yes">Users and groups</property>

@ -0,0 +1,328 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.cancel-symbolic</property>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="CreateGroupWindow">
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default-width">450</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-end">5</property>
<property name="spacing">5</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkButton" id="UserCancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Parrword:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.key-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image3</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Repeat password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.key-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Password hash:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="userTitleNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
</widgets>
</object>
</interface>

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.funnel-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.sync-symbolic</property>
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore2"/>
<object class="GtkApplicationWindow" id="MonitorWindow">
<property name="width-request">800</property>
<property name="height-request">600</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkNotebook">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore2</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Blocked</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">UID</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Login</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Username</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Primary group</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Additional groups</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Home directory</property>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users</property>
</object>
<packing>
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">UID</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group users</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Groups</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab-fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="SettingsBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="webHeaderNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
</interface>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -74,177 +74,181 @@ msgid "System users and groups configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:7 #: source/ubl-strings.h:7
msgid "Operation succeeded" msgid "Default user groups:"
msgstr "" msgstr ""
#: source/ubl-strings.h:8 #: source/ubl-strings.h:8
msgid "" msgid "Default user name (if there's no another):"
"Warning! Application was launched without root - root-dependent actions are " msgstr ""
"locked"
#: source/ubl-strings.h:9
msgid "User with ID 1000 is administrator"
msgstr "" msgstr ""
#: source/ubl-strings.h:10 #: source/ubl-strings.h:10
msgid "About" msgid "Default user password:"
msgstr "" msgstr ""
#: source/ubl-strings.h:11 #: source/ubl-strings.h:11
msgid "Documentation" msgid "Root user password:"
msgstr "" msgstr ""
#: source/ubl-strings.h:13 #: source/ubl-strings.h:12 source/ubl-strings.h:26
msgid "Save to local configuration" msgid "Password hash algorythm:"
msgstr "" msgstr ""
#: source/ubl-strings.h:14 #: source/ubl-strings.h:14
msgid "Save to global configuration" msgid "UID"
msgstr "" msgstr ""
#: source/ubl-strings.h:15 #: source/ubl-strings.h:15
msgid "Save configuration" msgid "Login"
msgstr "" msgstr ""
#: source/ubl-strings.h:16 #: source/ubl-strings.h:16
msgid "Save" msgid "Password"
msgstr "" msgstr ""
#: source/ubl-strings.h:18 #: source/ubl-strings.h:17
msgid "Load local configuration" msgid "User name"
msgstr "" msgstr ""
#: source/ubl-strings.h:19 #: source/ubl-strings.h:19
msgid "Load global configuration" msgid "UID:"
msgstr "" msgstr ""
#: source/ubl-strings.h:20 #: source/ubl-strings.h:20
msgid "Load" msgid "User name:"
msgstr ""
#: source/ubl-strings.h:21
msgid "Login:"
msgstr "" msgstr ""
#: source/ubl-strings.h:22 #: source/ubl-strings.h:22
msgid "Cancel" msgid "Password:"
msgstr "" msgstr ""
#: source/ubl-strings.h:24 #: source/ubl-strings.h:23
msgid "Would you like to read documentation in the Web?" msgid "Default"
msgstr "" msgstr ""
#: source/ubl-strings.h:25 #: source/ubl-strings.h:24
msgid "" msgid "Main group:"
"You will be redirected to documentation website where documentation is\n"
"translated and supported by community."
msgstr "" msgstr ""
#: source/ubl-strings.h:26 #: source/ubl-strings.h:25
msgid "Always redirect to online documentation" msgid "Additional groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:27 #: source/ubl-strings.h:27
msgid "Open documentation" msgid "Sync with SAMBA user"
msgstr "" msgstr ""
#: source/ubl-strings.h:28 #: source/ubl-strings.h:28
msgid "Project Home Page" msgid "Extra options:"
msgstr "" msgstr ""
#: source/ubl-strings.h:29 #: source/ubl-strings.h:29
msgid "Nothing were chosen" msgid "Cancel"
msgstr ""
#: source/ubl-strings.h:30
msgid "Ok"
msgstr "" msgstr ""
#: source/ubl-strings.h:32 #: source/ubl-strings.h:32
msgid "Global configuration loading succseeded." msgid "Block"
msgstr "" msgstr ""
#: source/ubl-strings.h:33 #: source/ubl-strings.h:33
msgid "Local configuration loading succseeded." msgid "Main group"
msgstr "" msgstr ""
#: source/ubl-strings.h:34 #: source/ubl-strings.h:34
msgid "Config loading failed" msgid "Additional parameters"
msgstr ""
#: source/ubl-strings.h:35
msgid "Password status"
msgstr "" msgstr ""
#: source/ubl-strings.h:36 #: source/ubl-strings.h:36
msgid "Local and global configuration saving succseeded." msgid "Users"
msgstr "" msgstr ""
#: source/ubl-strings.h:37 #: source/ubl-strings.h:37
msgid "Global configuration saving succseeded." msgid "GID"
msgstr "" msgstr ""
#: source/ubl-strings.h:38 #: source/ubl-strings.h:38
msgid "Local configuration saving succseeded." msgid "Group name"
msgstr ""
#: source/ubl-strings.h:40
msgid "Default user groups:"
msgstr "" msgstr ""
#: source/ubl-strings.h:41 #: source/ubl-strings.h:39
msgid "Default user name (if there's no another):" msgid "Group users"
msgstr "" msgstr ""
#: source/ubl-strings.h:42 #: source/ubl-strings.h:40
msgid "User with ID 1000 is administrator" msgid "Groups"
msgstr "" msgstr ""
#: source/ubl-strings.h:43 #: source/ubl-strings.h:43
msgid "Default user password:" msgid "Set a password"
msgstr "" msgstr ""
#: source/ubl-strings.h:44 #: source/ubl-strings.h:44
msgid "Root user password:" msgid "Endrypted password"
msgstr ""
#: source/ubl-strings.h:45 source/ubl-strings.h:59
msgid "Password hash algorythm:"
msgstr "" msgstr ""
#: source/ubl-strings.h:47 #: source/ubl-strings.h:47
msgid "UID" msgid "No password required"
msgstr "" msgstr ""
#: source/ubl-strings.h:48 #: source/ubl-strings.h:58
msgid "Login" msgid "Accept"
msgstr "" msgstr ""
#: source/ubl-strings.h:49 #: source/ubl-strings.h:61
msgid "Password" msgid "Automatically"
msgstr "" msgstr ""
#: source/ubl-strings.h:50 #: source/ubl-strings.h:62
msgid "User name" msgid "login"
msgstr "" msgstr ""
#: source/ubl-strings.h:52 #: source/ubl-strings.h:63
msgid "UID:" msgid "Create group with ununique GID"
msgstr "" msgstr ""
#: source/ubl-strings.h:53 #: source/ubl-strings.h:64
msgid "User name:" msgid "Create system group"
msgstr "" msgstr ""
#: source/ubl-strings.h:54 #: source/ubl-strings.h:65
msgid "Login:" msgid "Encrypted password"
msgstr "" msgstr ""
#: source/ubl-strings.h:55 #: source/ubl-strings.h:66
msgid "Password:" msgid "Additional configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:56 #: source/ubl-strings.h:82
msgid "Default" msgid "Blocked"
msgstr "" msgstr ""
#: source/ubl-strings.h:57 #: source/ubl-strings.h:83
msgid "Main group:" msgid "Username"
msgstr "" msgstr ""
#: source/ubl-strings.h:58 #: source/ubl-strings.h:84
msgid "Additional groups" msgid "Primary group"
msgstr "" msgstr ""
#: source/ubl-strings.h:60 #: source/ubl-strings.h:85
msgid "Sync with SAMBA user" msgid "Home directory"
msgstr "" msgstr ""
#: source/ubl-strings.h:61 #: source/ubl-strings.h:86 source/ubl-strings.h:88 source/ubl-strings.h:89
msgid "Extra options:" msgid "Group"
msgstr "" msgstr ""

@ -77,181 +77,182 @@ msgstr ""
"конфигурационный файл)" "конфигурационный файл)"
#: source/ubl-strings.h:7 #: source/ubl-strings.h:7
msgid "Operation succeeded" msgid "Default user groups:"
msgstr "Операция завершена" msgstr "Группы пользователей по умлочанию:"
#: source/ubl-strings.h:8 #: source/ubl-strings.h:8
msgid "" msgid "Default user name (if there's no another):"
"Warning! Application was launched without root - root-dependent actions are " msgstr "Имя пользователя по умолчанию (если нет других):"
"locked"
msgstr "" #: source/ubl-strings.h:9
"Внимание! Приложение было запущено без прав суперпользователя - действия, " msgid "User with ID 1000 is administrator"
"требующие их наличия заблокированы" msgstr "Пользователь с ID 1000 является администратором"
#: source/ubl-strings.h:10 #: source/ubl-strings.h:10
msgid "About" msgid "Default user password:"
msgstr "О программе" msgstr "Пароль для пользователя по умолчанию"
#: source/ubl-strings.h:11 #: source/ubl-strings.h:11
msgid "Documentation" msgid "Root user password:"
msgstr "Справка" msgstr "Пароль пользователя root"
#: source/ubl-strings.h:13 #: source/ubl-strings.h:12 source/ubl-strings.h:26
msgid "Save to local configuration" msgid "Password hash algorythm:"
msgstr "Сохранить в локальную конфигурацию" msgstr "Алгоритм хэширования пароля"
#: source/ubl-strings.h:14 #: source/ubl-strings.h:14
msgid "Save to global configuration" msgid "UID"
msgstr "Сохранить в глобальную конфигурацию" msgstr "UID"
#: source/ubl-strings.h:15 #: source/ubl-strings.h:15
msgid "Save configuration" msgid "Login"
msgstr "Сохранить конфигурацию" msgstr "Логин"
#: source/ubl-strings.h:16 #: source/ubl-strings.h:16
msgid "Save" msgid "Password"
msgstr "Сохранить" msgstr "Пароль"
#: source/ubl-strings.h:18 #: source/ubl-strings.h:17
msgid "Load local configuration" msgid "User name"
msgstr "Загрузить локальную конфигуруцию" msgstr "Имя пользователя"
#: source/ubl-strings.h:19 #: source/ubl-strings.h:19
msgid "Load global configuration" msgid "UID:"
msgstr "Загрузить глобальную конфигурацию" msgstr "UID:"
#: source/ubl-strings.h:20 #: source/ubl-strings.h:20
msgid "Load" msgid "User name:"
msgstr "Загрузить" msgstr "Имя пользователя:"
#: source/ubl-strings.h:21
msgid "Login:"
msgstr "Логин:"
#: source/ubl-strings.h:22 #: source/ubl-strings.h:22
msgid "Cancel" msgid "Password:"
msgstr "Отмена" msgstr "Пароль:"
#: source/ubl-strings.h:23
msgid "Default"
msgstr "По умолчанию"
#: source/ubl-strings.h:24 #: source/ubl-strings.h:24
msgid "Would you like to read documentation in the Web?" msgid "Main group:"
msgstr "Вы хотите прочитать справку в Сети?" msgstr "Основная группа:"
#: source/ubl-strings.h:25 #: source/ubl-strings.h:25
msgid "" msgid "Additional groups"
"You will be redirected to documentation website where documentation is\n" msgstr "Дополнительные группы"
"translated and supported by community."
msgstr ""
"Вы будете перенаправлены на сайт с документацией где страницы помощи\n"
"переводятся и поддерживаются сообществом."
#: source/ubl-strings.h:26
msgid "Always redirect to online documentation"
msgstr "Всегда перенаправлять"
#: source/ubl-strings.h:27 #: source/ubl-strings.h:27
msgid "Open documentation" msgid "Sync with SAMBA user"
msgstr "Прочитать справку" msgstr "Синхронизировать с пользователем SAMBA"
#: source/ubl-strings.h:28 #: source/ubl-strings.h:28
msgid "Project Home Page" msgid "Extra options:"
msgstr "Домашняя страница проекта" msgstr "Дополнительный опции:"
#: source/ubl-strings.h:29 #: source/ubl-strings.h:29
msgid "Nothing were chosen" msgid "Cancel"
msgstr "Ничего не было выбрано" msgstr "Отменить"
#: source/ubl-strings.h:30
msgid "Ok"
msgstr "Ок"
#: source/ubl-strings.h:32 #: source/ubl-strings.h:32
msgid "Global configuration loading succseeded." msgid "Block"
msgstr "Успешно загружена глобальная конфигурация" msgstr "Блок"
#: source/ubl-strings.h:33 #: source/ubl-strings.h:33
msgid "Local configuration loading succseeded." msgid "Main group"
msgstr "Успешно загружена локальная конфигурация" msgstr "Основная группа"
#: source/ubl-strings.h:34 #: source/ubl-strings.h:34
msgid "Config loading failed" msgid "Additional parameters"
msgstr "Ошибка загрузки конфигурации" msgstr "Дополнительные группы"
#: source/ubl-strings.h:35
msgid "Password status"
msgstr "Статус пароля"
#: source/ubl-strings.h:36 #: source/ubl-strings.h:36
msgid "Local and global configuration saving succseeded." msgid "Users"
msgstr "Успешно записаны локальная и глобальная конфигурация" msgstr "Пользователи"
#: source/ubl-strings.h:37 #: source/ubl-strings.h:37
msgid "Global configuration saving succseeded." msgid "GID"
msgstr "Успешно записана глобальная конфигурация" msgstr "GID"
#: source/ubl-strings.h:38 #: source/ubl-strings.h:38
msgid "Local configuration saving succseeded." #, fuzzy
msgstr "Успешно записана локальная конфигурация" msgid "Group name"
msgstr "Имя группы"
#: source/ubl-strings.h:40 #: source/ubl-strings.h:39
msgid "Default user groups:" msgid "Group users"
msgstr "Группы пользователей по умлочанию:" msgstr "Пользователи группы"
#: source/ubl-strings.h:41 #: source/ubl-strings.h:40
msgid "Default user name (if there's no another):" msgid "Groups"
msgstr "Имя пользователя по умолчанию (если нет других):" msgstr "Группы"
#: source/ubl-strings.h:42
msgid "User with ID 1000 is administrator"
msgstr "Пользователь с ID 1000 является администратором"
#: source/ubl-strings.h:43 #: source/ubl-strings.h:43
msgid "Default user password:" msgid "Set a password"
msgstr "Пароль для пользователя по умолчанию" msgstr "Установать пароль"
#: source/ubl-strings.h:44 #: source/ubl-strings.h:44
msgid "Root user password:" msgid "Endrypted password"
msgstr "Пароль пользователя root" msgstr "Зашифрованный пароль"
#: source/ubl-strings.h:45 source/ubl-strings.h:59
msgid "Password hash algorythm:"
msgstr "Алгоритм хэширования пароля"
#: source/ubl-strings.h:47 #: source/ubl-strings.h:47
msgid "UID" msgid "No password required"
msgstr "UID" msgstr "Пароль не требуется"
#: source/ubl-strings.h:48 #: source/ubl-strings.h:58
msgid "Login" msgid "Accept"
msgstr "Логин" msgstr "Принять"
#: source/ubl-strings.h:49 #: source/ubl-strings.h:61
msgid "Password" msgid "Automatically"
msgstr "Пароль" msgstr "Автоматически"
#: source/ubl-strings.h:50 #: source/ubl-strings.h:62
msgid "User name" msgid "login"
msgstr "Имя пользователя" msgstr "логин"
#: source/ubl-strings.h:52 #: source/ubl-strings.h:63
msgid "UID:" msgid "Create group with ununique GID"
msgstr "UID:" msgstr "Создать группу с повторяющимися (не уникальными) GID"
#: source/ubl-strings.h:53 #: source/ubl-strings.h:64
msgid "User name:" msgid "Create system group"
msgstr "Имя пользователя:" msgstr "Создать системную группу"
#: source/ubl-strings.h:54 #: source/ubl-strings.h:65
msgid "Login:" msgid "Encrypted password"
msgstr "Логин:" msgstr "Зашифрованный пароль"
#: source/ubl-strings.h:55 #: source/ubl-strings.h:66
msgid "Password:" msgid "Additional configuration"
msgstr "Пароль:" msgstr "Загрузить локальную конфигуруцию"
#: source/ubl-strings.h:56 #: source/ubl-strings.h:82
msgid "Default" msgid "Blocked"
msgstr "По умолчанию" msgstr "Заблокировано"
#: source/ubl-strings.h:57 #: source/ubl-strings.h:83
msgid "Main group:" msgid "Username"
msgstr "Основная группа:" msgstr "Имя пользователя"
#: source/ubl-strings.h:58 #: source/ubl-strings.h:84
msgid "Additional groups" msgid "Primary group"
msgstr "Дополнительные группы" msgstr "Основная группа"
#: source/ubl-strings.h:60 #: source/ubl-strings.h:85
msgid "Sync with SAMBA user" msgid "Home directory"
msgstr "Синхронизировать с пользователем SAMBA" msgstr "Домашний каталог"
#: source/ubl-strings.h:61 #: source/ubl-strings.h:86 source/ubl-strings.h:88 source/ubl-strings.h:89
msgid "Extra options:" msgid "Group"
msgstr "Дополнительный опции:" msgstr "Группа"

Loading…
Cancel
Save