From 09d2377bbff7b85009000693e3867fe47625cdab Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 7 Jun 2024 17:18:55 +0600 Subject: [PATCH 01/37] Init commit - library and initial window loading --- .gitignore | 12 + Makefile | 157 + README.md | 31 + com.ublinux.ubl-settings-kernel.checked.svg | 327 ++ com.ublinux.ubl-settings-kernel.policy | 24 + com.ublinux.ubl-settings-kernel.svg | 4957 +++++++++++++++++++ com.ublinux.ubl-settings-kernel.warning.svg | 55 + gresource.xml | 12 + icons/actions/download.svg | 1 + icons/actions/file-lines.svg | 1 + icons/actions/hashtag.svg | 1 + icons/status/cubes.svg | 1 + icons/status/dropbox.svg | 1 + icons/status/square-check.svg | 1 + kernel-list-addon.csv | 7 + kernel-list.csv | 4 + source/CMakeLists.txt | 92 + source/ubl-cmake.in | 1 + source/ubl-settings-kernel.c | 101 + source/ubl-settings-kernel.h | 67 + source/ubl-strings.h | 3 + ubl-settings-kernel-banner.png | Bin 0 -> 33872 bytes ubl-settings-kernel.css | 123 + ubl-settings-kernel.desktop | 15 + ubl-settings-kernel.glade | 684 +++ ubl-settings-kernel.pot | 186 + ubl-settings-kernel_ru.po | 190 + 27 files changed, 7054 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 com.ublinux.ubl-settings-kernel.checked.svg create mode 100644 com.ublinux.ubl-settings-kernel.policy create mode 100644 com.ublinux.ubl-settings-kernel.svg create mode 100644 com.ublinux.ubl-settings-kernel.warning.svg create mode 100644 gresource.xml create mode 100644 icons/actions/download.svg create mode 100644 icons/actions/file-lines.svg create mode 100644 icons/actions/hashtag.svg create mode 100644 icons/status/cubes.svg create mode 100644 icons/status/dropbox.svg create mode 100644 icons/status/square-check.svg create mode 100644 kernel-list-addon.csv create mode 100644 kernel-list.csv create mode 100644 source/CMakeLists.txt create mode 100644 source/ubl-cmake.in create mode 100644 source/ubl-settings-kernel.c create mode 100644 source/ubl-settings-kernel.h create mode 100644 source/ubl-strings.h create mode 100644 ubl-settings-kernel-banner.png create mode 100644 ubl-settings-kernel.css create mode 100644 ubl-settings-kernel.desktop create mode 100644 ubl-settings-kernel.glade create mode 100644 ubl-settings-kernel.pot create mode 100644 ubl-settings-kernel_ru.po diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e4c2d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.vscode/ +ubl-settings-kernel +*~ +build/ +compile/ +*# +terminal-commands/ +source/ubl-cmake.h +vgcore* +.BUILD.md +.updatebuild.sh +.install.sh \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c7e62fd --- /dev/null +++ b/Makefile @@ -0,0 +1,157 @@ +#!/usr/bin/make -f + +#SHELL := /bin/bash +MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) +MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) +MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) + +CMAKE_COMMAND = cmake +CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile +DEPENDS = /bin/cmake +PREFIX ?= /usr/local +PKGNAME = $(MAKEFILE_DIR) +FILE_VER = source/${PKGNAME}.h +PKGIDENT=$(subst /,-,${PREFIX}) + +default_target: all + +.PHONY: all init depend debug prepare check build uninstall install clean help + +all: init build + +init: + @echo "Initialize ..."; \ + if [ -d ".git" ]; then \ + 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 \ + LATEST_TAG="Development"; \ + fi; \ + sed -r "s/^(string version_application).*/\1 = \"$${LATEST_TAG}\";/" -i ${FILE_VER}; \ + echo "-- Build path: ${CMAKE_BUILD_DIR}" + +depend: + @echo "Check depends ..." + @for FILE_DEPEND in $(DEPENDS); do \ + if [ ! -f $${FILE_DEPEND} ]; then \ + echo "ERROR: Depend '$${FILE_DEPEND}' not found !"; \ + exit 1; \ + fi; \ + done; \ + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B${CMAKE_BUILD_DIR} --check-build-system CMakeFiles/Makefile.cmake 1 || exit 1; \ + echo "Check depends: OK" + +debug: + @echo "Debug ..." + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ + fi; \ + echo "Debug: OK" + +prepare: + @echo "Prepare ..."; \ + if [ ! -d ${CMAKE_BUILD_DIR} ]; then \ + $(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \ + fi; \ + echo "Prepare: OK" + +check: + @echo "Check ..."; \ + if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \ + echo "Check: OK"; \ + else \ + echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not found !"; \ + exit 1; \ + fi + +build: depend prepare + @echo "Build ..."; \ + $(MAKE_COMMAND) --directory=${CMAKE_BUILD_DIR}; \ + sed -r "s/^(string version_application).*/\1;/" -i ${FILE_VER}; \ + echo "Build: OK" + +uninstall: + @echo "Uninstall ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + $(RM) "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \ + done + @for FILE_SVG in $(wildcard *.svg); do \ + for SIZE in 16x16 32x32 48x48 scalable; do \ + $(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \ + done; \ + done + @$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}" + @$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop" + @$(RM) "${DESTDIR}/usr/share/polkit-1/actions/com.ublinux.${PKGNAME}${PKGIDENT}.policy" + @for FILE_ICON in $(wildcard icons/*/*.svg); do \ + SUB_NAME=$${FILE_ICON#*/}; SUB_NAME=$${SUB_NAME%/*}; \ + install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/$${SUB_NAME}" $${FILE_ICON}; \ + done + @if [ -z ${DESTDIR} ]; then \ + [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ + update-desktop-database --quiet &>/dev/null || true; \ + [ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \ + fi + @echo "Uninstall: OK" + +install: check uninstall + @echo "Install ..." + @for FILE_PO in $(wildcard *.po); do \ + LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ + install -dm755 "${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES"; \ + FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \ + PATH_FILE_MO="${DESTDIR}/usr/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \ + echo "$${FILE_PO}"; \ + msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \ + done + @for SIZE in 16 32 48; do \ + install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \ + 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 + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg" + @cp ./com.ublinux.${PKGNAME}.policy ./compile/com.ublinux.${PKGNAME}${PKGIDENT}.policy + @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 -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" + @install -Dm644 -t "${DESTDIR}/usr/share/polkit-1/actions/" "${CMAKE_BUILD_DIR}/com.ublinux.${PKGNAME}${PKGIDENT}.policy" + @ldconfig -n /usr/local/lib + @if [ -z ${DESTDIR} ]; then \ + [ -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; \ + [ -d "${DESTDIR}/usr/share/applications" ] && touch "${DESTDIR}/usr/share/applications" &>/dev/null || true; \ + fi + @echo "Install: OK" + +clean: + @echo "Clean ..." + @$(RM) -rd ${CMAKE_BUILD_DIR} + @if [ -d ${CMAKE_BUILD_DIR} ]; then \ + echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ + else \ + echo "Clean: OK"; \ + fi + +help: + @echo "The following are some of the valid targets for this Makefile:"; \ + echo "... all (the default if no target is provided)"; \ + echo "... init"; \ + echo "... debug"; \ + echo "... prepare"; \ + echo "... compile"; \ + echo "... install"; \ + echo "... uninstall"; \ + echo "... clean" \ No newline at end of file diff --git a/README.md b/README.md index 2816c3a..19cebb1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,33 @@ # ubl-settings-kernel +# Выполнить +# Build +In order to build ubl-settings-kernel you will need: + +- CMake +- C compiler +- GTK+ 3 & dependencies +- webkit2gtk (optional) +- vte-2.91 +- [libublsettings](https://gitea.ublinux.ru/Applications/libublsettings) +- [libublsettings-gtk3](https://gitea.ublinux.ru/Applications/libublsettings-gtk3) +- [libublsettingsui-gtk3](https://gitea.ublinux.ru/Applications/libublsettingsui-gtk3) + +Once you have all the necessary dependencies, you can use: +```sh +$ make +``` + +# Installation +After a successful build, just use: +```sh +$ sudo make install clean +``` + +# Uninstallation +After a successful build, just use: +```sh +$ sudo make uninstall +``` + +![alt text](screenshot/screenshot.png) diff --git a/com.ublinux.ubl-settings-kernel.checked.svg b/com.ublinux.ubl-settings-kernel.checked.svg new file mode 100644 index 0000000..e3cab42 --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.checked.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-kernel.policy b/com.ublinux.ubl-settings-kernel.policy new file mode 100644 index 0000000..211c7c1 --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.policy @@ -0,0 +1,24 @@ + + + + + UBLinux + https://ublinux.ru + + + Run ubl-settings-kernel as root + Запуск утилиты ubl-settings-kernel с правами root + Authentication is required to run ubl-settings-kernel + Требуется авторизация для запуска утилиты ubl-settings-kernel с правами root + + auth_admin + auth_admin + auth_admin + + /usr/bin/ubl-settings-kernel + true + + + diff --git a/com.ublinux.ubl-settings-kernel.svg b/com.ublinux.ubl-settings-kernel.svg new file mode 100644 index 0000000..f636c26 --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.svg @@ -0,0 +1,4957 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.ublinux.ubl-settings-kernel.warning.svg b/com.ublinux.ubl-settings-kernel.warning.svg new file mode 100644 index 0000000..9a90dba --- /dev/null +++ b/com.ublinux.ubl-settings-kernel.warning.svg @@ -0,0 +1,55 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/gresource.xml b/gresource.xml new file mode 100644 index 0000000..89ee9b6 --- /dev/null +++ b/gresource.xml @@ -0,0 +1,12 @@ + + + + ubl-settings-kernel.glade + + + ubl-settings-kernel.css + + + ubl-settings-kernel-banner.png + + \ No newline at end of file diff --git a/icons/actions/download.svg b/icons/actions/download.svg new file mode 100644 index 0000000..6ed49b5 --- /dev/null +++ b/icons/actions/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/actions/file-lines.svg b/icons/actions/file-lines.svg new file mode 100644 index 0000000..be19f58 --- /dev/null +++ b/icons/actions/file-lines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/actions/hashtag.svg b/icons/actions/hashtag.svg new file mode 100644 index 0000000..d4b49fd --- /dev/null +++ b/icons/actions/hashtag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/status/cubes.svg b/icons/status/cubes.svg new file mode 100644 index 0000000..dbed1b8 --- /dev/null +++ b/icons/status/cubes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/status/dropbox.svg b/icons/status/dropbox.svg new file mode 100644 index 0000000..7bccea6 --- /dev/null +++ b/icons/status/dropbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/status/square-check.svg b/icons/status/square-check.svg new file mode 100644 index 0000000..1f72889 --- /dev/null +++ b/icons/status/square-check.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kernel-list-addon.csv b/kernel-list-addon.csv new file mode 100644 index 0000000..b0f0244 --- /dev/null +++ b/kernel-list-addon.csv @@ -0,0 +1,7 @@ +PAСKAGE_UBM;PAСKAGE;NAME;DESCRIPTION +ubm-002-linux515-headers;linux515-headers;Linux 5.15 headers;The Linux kernel headers v5.15 +ubm-003-linux515-docs;linux515-docs;Linux 5.15 Docs;The Linux kernel docs v5.15 +ubm-linux515-dkms;linux515-dkms;Linux 5.15 DKMS modules;The Linux kernel DKMS modules v5.15 : acpi_call,r8125,r8168,rtl8723bu,rtl88x2bu,v4l2loopback,bbswitch,broadcom-wl,scap,tp_smapi-dkms,vhba-module,vboxhost +ubm-002-linux517-headers;linux517-headers;Linux 5.17 headers;The Linux kernel headers v5.17 +ubm-003-linux517-docs;linux517-docs;Linux 5.17 Docs;The Linux kernel docs v5.17 +ubm-linux517-dkms;linux517-dkms;Linux 5.17 DKMS modules;The Linux kernel DKMS modules v5.17 : acpi_call,r8125,r8168,rtl8723bu,rtl88x2bu,v4l2loopback,bbswitch,broadcom-wl,scap,tp_smapi-dkms,vhba-module,vboxhost \ No newline at end of file diff --git a/kernel-list.csv b/kernel-list.csv new file mode 100644 index 0000000..f8afc25 --- /dev/null +++ b/kernel-list.csv @@ -0,0 +1,4 @@ +PAСKAGE_UBM;PAСKAGE;NAME;TAG;DESCRIPTION +ubm-001-linux515,ubm-001-linux515-headers;linux515,linux515-headers;Linux 5.15;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.15 and modules, headers +ubm-001-linux517,ubm-001-linux517-headers;linux517,linux517-headers;Linux 5.17;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.17 and modules, headers +ubm-001-linux66,ubm-001-linux66-headers;linux66,linux66-headers;Linux 6.6;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.6 and modules, headers \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt new file mode 100644 index 0000000..00a33a5 --- /dev/null +++ b/source/CMakeLists.txt @@ -0,0 +1,92 @@ +cmake_minimum_required(VERSION 3.7) +project(ubl-settings-kernel) + +find_package(PkgConfig REQUIRED) + +pkg_check_modules(GTK REQUIRED gtk+-3.0) +include_directories(${GTK_INCLUDE_DIRS}) +link_directories(${GTK_LIBRARY_DIRS}) +add_definitions(${GTK_CFLAGS_OTHER}) + +pkg_check_modules(VTE291 REQUIRED vte-2.91) +include_directories(${VTE291_INCLUDE_DIRS}) +link_directories(${VTE291_LIBRARY_DIRS}) +add_definitions(${VTE291_CFLAGS_OTHER}) + +find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + +option(WEBKIT_FOUND "No" OFF) +if(WEBKIT_LIBRARIES_FOUND) + option(WEBKIT_FOUND "Yes" ON) + PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) + include_directories(${WEBKIT_INCLUDE_DIRS}) + link_directories(${WEBKIT_LIBRARY_DIRS}) + add_definitions(${WEBKIT_CFLAGS_OTHER}) +endif() + +set(GRESOURCE_C resources.c) +set(GRESOURCE_XML gresource.xml) + +find_program(GLIB_COMPILE_RESOURCES NAMES glib-compile-resources REQUIRED) +add_custom_target(GLADE ubl-settings-kernel.glade) + +set(DEPENDFILES + ../ubl-settings-kernel.glade + ../gresource.xml + ../ubl-settings-kernel-banner.png + ../ubl-settings-kernel.css + ) + +file(COPY ${DEPENDFILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +add_custom_command( + OUTPUT ${GRESOURCE_C} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${GLIB_COMPILE_RESOURCES} + ARGS + --generate-source + --target=${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} + ${GRESOURCE_XML} + VERBATIM + MAIN_DEPENDENCY ${GRESOURCE_XML} + DEPENDS + ${GLADE} +) +add_custom_target( + dummy-resource + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} +) + +add_definitions(-DVTE_INCLUDE) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ + -O2 -pipe -fno-plt -fexceptions \ + -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ + -fstack-clash-protection -fcf-protection") + +set(SOURCE_FILES + ubl-settings-kernel.c + ubl-settings-kernel.h + ubl-strings.h + ) + +set(LIBRARIES + ${GTK_LIBRARIES} + ${WEBKIT_LIBRARIES} + ${UTILS_LIBRARIES} + ${VTE291_LIBRARIES} + pthread + ublsettings + ublsettings-gtk3 + ublsettingsui-gtk3) + + +add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) +target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBRARIES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR}) +set_source_files_properties( + ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} + PROPERTIES GENERATED TRUE +) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) +add_dependencies(${PROJECT_NAME} dummy-resource) \ No newline at end of file diff --git a/source/ubl-cmake.in b/source/ubl-cmake.in new file mode 100644 index 0000000..d4623a7 --- /dev/null +++ b/source/ubl-cmake.in @@ -0,0 +1 @@ +#cmakedefine WEBKIT_FOUND diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c new file mode 100644 index 0000000..b2c5791 --- /dev/null +++ b/source/ubl-settings-kernel.c @@ -0,0 +1,101 @@ +#include "ubl-settings-kernel.h" + +config main_config; + +//functions + +void yon_load_proceed(YON_CONFIG_TYPE type){ + yon_config_clean(); + if (!yon_char_is_empty(config_get_default_command)) + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_global_command,NULL); + } else if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + textdomain(template_ui_LocaleName); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + char *command = yon_config_get_custom_command(path); + yon_config_load_config(type,command,NULL); + } +} + +// standard functions + +/**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; + main_config.load_mode=1; +} + +/**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,"BoxMain"),1,1,0); + // Custom widgets configuration + { + + } +} + +int main(int argc, char *argv[]){ + local=setlocale(LC_ALL, ""); + textdomain (LocaleName); + config_init(); + + yon_ubl_connect_config((_template_config*)&main_config); + yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); + config_str unfound = NULL; + int size=0; + yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); + gtk_init(&argc,&argv); + template_main_window *widgets = yon_ubl_window_setup(); + yon_main_window_complete((main_window*)widgets); + char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); + yon_window_config_load(path); + if (getuid()!=0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + textdomain(LocaleName); + } + gtk_main(); + return 0; +} \ No newline at end of file diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h new file mode 100644 index 0000000..764d92e --- /dev/null +++ b/source/ubl-settings-kernel.h @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef WEBKIT_FOUND + #include +#endif +#include "ubl-strings.h" + +#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-TEMPLATE" + +#define _(String) gettext(String) + +#define glade_path "/com/ublinux/ui/ubl-settings-kernel.glade" +#define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png" +#define CssPath "/com/ublinux/css/ubl-settings-kernel.css" +#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) + +#define LocalePath "/usr/share/locale" +#define LocaleName "ubl-settings-kernel" + +#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system PARAMETERS",NULL) +#define config_get_local_command "ubconfig --source system get system PARAMETERS" +#define config_get_global_command "ubconfig --source global get system PARAMETERS" +#define config_get_default_command "" + +#define config_get_global_only_parameters "" +#define config_get_local_only_parameters "" + +typedef char* string; +string version_application; + +char *local; + +typedef struct { + template_config_fields + +} config; + +typedef struct { + template_window_fields +} main_window; + + +typedef struct { + GtkWidget *Window; + GtkWidget *HeaderLabel; + + GtkWidget *AlwaysOpenCheck; + + GtkWidget *CloseButton; + GtkWidget *AcceptButton; +} documentation_confirmation_window; + +void yon_load_proceed(YON_CONFIG_TYPE type); + +void config_init(); + +void yon_main_window_complete(main_window *widgets); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h new file mode 100644 index 0000000..e3ccc26 --- /dev/null +++ b/source/ubl-strings.h @@ -0,0 +1,3 @@ + +#define TITLE_LABEL _("ubl-settings-kernel") +#define TITLE_INFO_LABEL _("kernel configuration") diff --git a/ubl-settings-kernel-banner.png b/ubl-settings-kernel-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb67cbc38babeaf498d981356cf7e77e2741f12 GIT binary patch literal 33872 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 { + border-right-width:0.5px; + border-style: solid; + border-color: @theme_fg_color; +} +.tableborders { + border-width:0.5px 0px 0.5px 0.5px; + border-style: solid; + border-color: @theme_fg_color; +} +.thin { + margin:0px; + padding:0px; +} +.noborder { + border:none; +} +.nobackground { +background:transparent; +} +.nobackground:active { +background:transparent; +} +.textHead{ + text-shadow: 2px 2px @theme_bg_color; + color: @theme_text_color; +} + +.inherited>* { + border:none; + background:inherit; +} +.workingbg { + background:@theme_base_color; +} +.menuitembottom{ + margin-top:0px; + margin-bottom:3px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemmiddle{ + margin-top:0px; + margin-bottom:0px; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + + .menuitemtop{ + margin-bottom:0px; + border-color:inherit; + border-top-width:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemtop>*{ + margin:2px 2px 0 2px; + padding: 3px 10px 3px 5px; + /* padding: 5px 0px 3px 5px; */ + border:transparent; + } + .menuitemmiddle>*{ + margin:0 2px 0 2px; + padding: 3px 10px 3px 5px; + /* padding: 3px 0px 3px 5px; */ + border:transparent; + } + .menuitembottom>*{ + margin:0 2px 2px 2px; + padding: 3px 10px 3px 5px; + /* padding: 3px 0px 5px 5px; */ + } + .menuitemtop:hover { + background:@theme_bg_color; + border-color:inherit; + border-top-width:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitemmiddle:hover { + background:@theme_bg_color; + border-color:inherit; + border-left-width:inherit; + border-right-width:inherit; + } + .menuitembottom:hover { + background:@theme_bg_color; + border-color:inherit; + border-bottom-width:0px; + border-left-width:inherit; + border-right-width:inherit; + + } + .menuitemtop:hover>* { + margin:2px 2px 0 2px; + padding: 3px 10px 3px 5px; + /* padding: 5px 0 3px 5px; */ + background:@theme_selected_bg_color; + border-radius:2px; + } + .menuitemmiddle:hover>* { + margin:0 2px 0px 2px; + padding: 3px 10px 3px 5px; + /* padding: 3px 0px 3px 5px; */ + background:@theme_selected_bg_color; + border-radius:2px; + } + .menuitembottom:hover>* { + margin:0 2px 2px 2px; + padding: 3px 10px 3px 5px; + /* padding: 3px 0px 5px 5px; */ + background:@theme_selected_bg_color; + border-radius:2px; + } + .boxInfoMessError{ + background-color: #ea9999; +} + +.boxInfoMessOK{ + background-color: #f3f0ac; +} \ No newline at end of file diff --git a/ubl-settings-kernel.desktop b/ubl-settings-kernel.desktop new file mode 100644 index 0000000..2624408 --- /dev/null +++ b/ubl-settings-kernel.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=System kernel +Name[ru]=kernel +GenericName=ubl-settings-kernel +GenericName[ru]=kernel +Comment=Kernel downloading and installation for default load +Comment[ru]=Приложение для kernel +Type=Application +Exec=pkexec ubl-settings-kernel +Icon=com.ublinux.ubl-settings-kernel +Terminal=false +X-XfcePluggable=true +X-UBLPluggable=true +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-Personal-Settings; diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade new file mode 100644 index 0000000..192cfd0 --- /dev/null +++ b/ubl-settings-kernel.glade @@ -0,0 +1,684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + True + False + fae + + + + + + + True + False + True + gsdrg + + + + + True + False + + + True + False + + + True + False + vertical + + + + + + True + True + 0 + + + + + True + False + vertical + + + True + False + label + 0 + + + False + True + 0 + + + + + True + True + 1 + + + + + True + False + vertical + + + + + + True + True + 2 + + + + + True + False + vertical + + + True + True + False + True + + + + + + False + True + 0 + + + + + False + True + 3 + + + + + True + False + vertical + + + True + True + False + True + + + + + + False + True + 0 + + + + + False + True + 4 + + + + + True + False + vertical + + + True + True + False + True + + + + + + False + True + 0 + + + + + False + True + 5 + + + + + True + False + vertical + + + True + False + label + 0 + + + False + True + 0 + + + + + True + True + 6 + + + + + + + + True + False + com.ublinux.libublsettingsui-gtk3.sync-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.important-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.source-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.settings-symbolic + + + + + True + False + vertical + + + True + False + 5 + + + True + False + 26 + vertical + 6 + + + True + True + True + image1 + + + + False + True + 0 + + + + + True + True + True + image2 + + + + False + True + 1 + + + + + True + True + True + image3 + + + + False + True + 2 + + + + + True + True + True + image4 + + + + False + True + 3 + + + + + False + True + 0 + + + + + True + True + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + False + vertical + + + True + True + liststore2 + 0 + + + + + + + + + 0 + + + + + + 1 + + + + + + + + + + 2 + + + + + + + + + + 3 + + + + + + + Installed + + + + 4 + 0 + + + + + + + + + + 5 + + + + + + + + + True + + + 6 + + + + + + + + + + 7 + + + + + + + False + True + 0 + + + + + True + True + KernelsList + + + Status + + + + 0 + + + + + + 1 + + + + + + + Kernel + + + + 2 + + + + + + + Kernel type + + + + 3 + + + + + + + Module + + + + 4 + + + + + + + Package + + + + 5 + + + + + + + Load + + + True + + + 6 + + + + + + + Description + + + + 7 + + + + + + + True + True + 1 + + + + + True + True + 0 + + + + + + + True + False + Kernels + + + False + + + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + True + liststore3 + + + + + + + + + + + + Installed + + + + + + + + False + True + 0 + + + + + True + True + AdditionsList + + + Status + + + + + Addition + + + + + Module + + + + + Package + + + + + Description + + + + + True + True + 1 + + + + + 1 + + + + + True + False + Additions + + + 1 + False + + + + + True + True + 1 + + + + + True + True + 0 + + + + diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot new file mode 100644 index 0000000..3ee15f2 --- /dev/null +++ b/ubl-settings-kernel.pot @@ -0,0 +1,186 @@ +# Language translations for ubl-settings-kernel package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-kernel package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-kernel 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/ubl-strings.h:1 +msgid "Version:" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "ubl-settings-kernel version:" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Usage:" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "[OPTIONS]" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Options:" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Show this help" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Show package version" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock this help menu" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock configuration saving" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock local configration saving" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock global configration saving" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Lock global configration loading" +msgstr "" + +#: source/ubl-strings.h:2 +msgid "Clear application configuration" +msgstr "" + +#: source/ubl-strings.h:4 +msgid "ubl-settings-kernel" +msgstr "" + +#: source/ubl-strings.h:5 +msgid "kernel configuration" +msgstr "" + +#: source/ubl-strings.h:7 +msgid "Operation succeeded" +msgstr "" + +#: source/ubl-strings.h:8 +msgid "Nothing were chosen" +msgstr "" + +#: source/ubl-strings.h:9 +msgid "" +"Warning! Application was launched without root - root-dependent actions are " +"locked" +msgstr "" + +#: source/ubl-strings.h:11 +msgid "About" +msgstr "" + +#: source/ubl-strings.h:12 +msgid "Documentation" +msgstr "" + +#: source/ubl-strings.h:14 +msgid "Save to local configuration" +msgstr "" + +#: source/ubl-strings.h:15 +msgid "Save to global configuration" +msgstr "" + +#: source/ubl-strings.h:16 +msgid "Save to global and local configuration" +msgstr "" + +#: source/ubl-strings.h:17 +msgid "Save" +msgstr "" + +#: source/ubl-strings.h:19 +msgid "Load local configuration" +msgstr "" + +#: source/ubl-strings.h:20 +msgid "Load global configuration" +msgstr "" + +#: source/ubl-strings.h:21 +msgid "Load" +msgstr "" + +#: source/ubl-strings.h:23 +msgid "Cancel" +msgstr "" + +#: source/ubl-strings.h:24 +msgid "Close" +msgstr "" + +#: source/ubl-strings.h:25 +msgid "Apply" +msgstr "" + +#: source/ubl-strings.h:27 +msgid "Would you like to read documentation in the Web?" +msgstr "" + +#: source/ubl-strings.h:28 +msgid "" +"You will be redirected to documentation website, where documentation is\n" +"translated and supported by community." +msgstr "" + +#: source/ubl-strings.h:29 +msgid "Always redirect to online documentation" +msgstr "" + +#: source/ubl-strings.h:30 +msgid "Open documentation" +msgstr "" + +#: source/ubl-strings.h:31 +msgid "Project Home Page" +msgstr "" + +#: source/ubl-strings.h:33 +msgid "Global configuration loading succeeded." +msgstr "" + +#: source/ubl-strings.h:34 +msgid "Local configuration loading succeeded." +msgstr "" + +#: source/ubl-strings.h:35 +msgid "Config loading failed" +msgstr "" + +#: source/ubl-strings.h:37 +msgid "Local and global configuration saving succeeded." +msgstr "" + +#: source/ubl-strings.h:38 +msgid "Global configuration saving succeeded." +msgstr "" + +#: source/ubl-strings.h:39 +msgid "Local configuration saving succeeded." +msgstr "" diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po new file mode 100644 index 0000000..a8682ce --- /dev/null +++ b/ubl-settings-kernel_ru.po @@ -0,0 +1,190 @@ +# Russian translations for ubl-settings-kernel package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-kernel package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-kernel 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: source/ubl-strings.h:1 +msgid "Version:" +msgstr "Версия:" + +#: source/ubl-strings.h:2 +msgid "ubl-settings-kernel version:" +msgstr "Версия ubl-settings-kernel: " + +#: source/ubl-strings.h:2 +msgid "Usage:" +msgstr "Использование:" + +#: source/ubl-strings.h:2 +msgid "[OPTIONS]" +msgstr "[АРГУМЕНТЫ]" + +#: source/ubl-strings.h:2 +msgid "Options:" +msgstr "Аргументы:" + +#: source/ubl-strings.h:2 +msgid "Show this help" +msgstr "Показать параметры справки" + +#: source/ubl-strings.h:2 +msgid "Show package version" +msgstr "Показать текущую версию" + +#: source/ubl-strings.h:2 +msgid "Lock this help menu" +msgstr "Блокировка вызова справки" + +#: source/ubl-strings.h:2 +msgid "Lock configuration saving" +msgstr "Блокировка сохранения локальной и глобальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Lock local configration saving" +msgstr "Блокировка сохранения локальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Lock global configration saving" +msgstr "Блокировка сохранения глобальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Lock global configration loading" +msgstr "Блокировка загрузки глобальной конфигурации" + +#: source/ubl-strings.h:2 +msgid "Clear application configuration" +msgstr "Удалить конфигурацию приложения" + +#: source/ubl-strings.h:4 +msgid "ubl-settings-kernel" +msgstr "Настройки kernel" + +#: source/ubl-strings.h:5 +msgid "kernel configuration" +msgstr "Настройки kernel" + +#: source/ubl-strings.h:7 +msgid "Operation succeeded" +msgstr "Операция завершена" + +#: source/ubl-strings.h:8 +msgid "Nothing were chosen" +msgstr "Ничего не было выбрано" + +#: source/ubl-strings.h:9 +msgid "" +"Warning! Application was launched without root - root-dependent actions are " +"locked" +msgstr "" +"Внимание! Приложение было запущено без прав суперпользователя - действия, " +"требующие их наличия заблокированы" + +#: source/ubl-strings.h:11 +msgid "About" +msgstr "О программе" + +#: source/ubl-strings.h:12 +msgid "Documentation" +msgstr "Справка" + +#: source/ubl-strings.h:14 +msgid "Save to local configuration" +msgstr "Сохранить в локальную конфигурацию" + +#: source/ubl-strings.h:15 +msgid "Save to global configuration" +msgstr "Сохранить в глобальную конфигурацию" + +#: source/ubl-strings.h:16 +msgid "Save to global and local configuration" +msgstr "Сохранить в глобальную и локальную конфигурацию" + +#: source/ubl-strings.h:17 +msgid "Save" +msgstr "Сохранить" + +#: source/ubl-strings.h:19 +msgid "Load local configuration" +msgstr "Загрузить локальную конфигурацию" + +#: source/ubl-strings.h:20 +msgid "Load global configuration" +msgstr "Загрузить глобальную конфигурацию" + +#: source/ubl-strings.h:21 +msgid "Load" +msgstr "Загрузить" + +#: source/ubl-strings.h:23 +msgid "Cancel" +msgstr "Отмена" + +#: source/ubl-strings.h:24 +msgid "Close" +msgstr "Закрыть" + +#: source/ubl-strings.h:25 +msgid "Apply" +msgstr "Применить" + +#: source/ubl-strings.h:27 +msgid "Would you like to read documentation in the Web?" +msgstr "Вы хотите прочитать справку в Сети?" + +#: source/ubl-strings.h:28 +msgid "" +"You will be redirected to documentation website, where documentation is\n" +"translated and supported by community." +msgstr "" +"Вы будете перенаправлены на сайт с документацией, где страницы помощи\n" +"переводятся и поддерживаются сообществом." + +#: source/ubl-strings.h:29 +msgid "Always redirect to online documentation" +msgstr "Всегда перенаправлять" + +#: source/ubl-strings.h:30 +msgid "Open documentation" +msgstr "Прочитать справку" + +#: source/ubl-strings.h:31 +msgid "Project Home Page" +msgstr "Домашняя страница проекта" + +#: source/ubl-strings.h:33 +msgid "Global configuration loading succeeded." +msgstr "Успешно загружена глобальная конфигурация" + +#: source/ubl-strings.h:34 +msgid "Local configuration loading succeeded." +msgstr "Успешно загружена локальная конфигурация" + +#: source/ubl-strings.h:35 +msgid "Config loading failed" +msgstr "Ошибка загрузки конфигурации" + +#: source/ubl-strings.h:37 +msgid "Local and global configuration saving succeeded." +msgstr "Успешно записаны локальная и глобальная конфигурация" + +#: source/ubl-strings.h:38 +msgid "Global configuration saving succeeded." +msgstr "Успешно записана глобальная конфигурация" + +#: source/ubl-strings.h:39 +msgid "Local configuration saving succeeded." +msgstr "Успешно записана локальная конфигурация" \ No newline at end of file -- 2.35.1 From 448af5a4656eed8342f6ff094197fee8f47d778f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 29 Oct 2024 18:02:11 +0600 Subject: [PATCH 02/37] Table rework for tags rendering --- gresource.xml | 7 + kernel-list-addon.csv | 11 +- kernel-list.csv | 6 +- source/CMakeLists.txt | 5 + source/ubl-settings-kernel.c | 188 +++++++- source/ubl-settings-kernel.h | 73 ++- source/ubl-strings.h | 2 + ubl-settings-kernel-info.glade | 83 ++++ ubl-settings-kernel-install.glade | 162 +++++++ ubl-settings-kernel-table-row.glade | 149 +++++++ ubl-settings-kernel.css | 85 +++- ubl-settings-kernel.glade | 660 +++++++++------------------- 12 files changed, 965 insertions(+), 466 deletions(-) create mode 100644 ubl-settings-kernel-info.glade create mode 100644 ubl-settings-kernel-install.glade create mode 100644 ubl-settings-kernel-table-row.glade diff --git a/gresource.xml b/gresource.xml index 89ee9b6..0d500b3 100644 --- a/gresource.xml +++ b/gresource.xml @@ -2,6 +2,9 @@ ubl-settings-kernel.glade + ubl-settings-kernel-info.glade + ubl-settings-kernel-install.glade + ubl-settings-kernel-table-row.glade ubl-settings-kernel.css @@ -9,4 +12,8 @@ ubl-settings-kernel-banner.png + + kernel-list.csv + kernel-list-addon.csv + \ No newline at end of file diff --git a/kernel-list-addon.csv b/kernel-list-addon.csv index b0f0244..dd584a5 100644 --- a/kernel-list-addon.csv +++ b/kernel-list-addon.csv @@ -1,7 +1,10 @@ PAСKAGE_UBM;PAСKAGE;NAME;DESCRIPTION ubm-002-linux515-headers;linux515-headers;Linux 5.15 headers;The Linux kernel headers v5.15 ubm-003-linux515-docs;linux515-docs;Linux 5.15 Docs;The Linux kernel docs v5.15 -ubm-linux515-dkms;linux515-dkms;Linux 5.15 DKMS modules;The Linux kernel DKMS modules v5.15 : acpi_call,r8125,r8168,rtl8723bu,rtl88x2bu,v4l2loopback,bbswitch,broadcom-wl,scap,tp_smapi-dkms,vhba-module,vboxhost -ubm-002-linux517-headers;linux517-headers;Linux 5.17 headers;The Linux kernel headers v5.17 -ubm-003-linux517-docs;linux517-docs;Linux 5.17 Docs;The Linux kernel docs v5.17 -ubm-linux517-dkms;linux517-dkms;Linux 5.17 DKMS modules;The Linux kernel DKMS modules v5.17 : acpi_call,r8125,r8168,rtl8723bu,rtl88x2bu,v4l2loopback,bbswitch,broadcom-wl,scap,tp_smapi-dkms,vhba-module,vboxhost \ No newline at end of file +ubm-linux515-dkms;linux515-dkms;Linux 5.15 DKMS modules;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +ubm-002-linux61-headers;linux61-headers;Linux 6.1 headers;The Linux kernel headers v6.1 +ubm-003-linux61-docs;linux61-docs;Linux 6.1 Docs;The Linux kernel docs v6.1 +ubm-linux61-dkms;linux61-dkms;Linux 6.1 DKMS modules;The Linux kernel DKMS modules v6.1 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +ubm-002-linux66-headers;linux66-headers;Linux 6.6 headers;The Linux kernel headers v6.6 +ubm-003-linux66-docs;linux66-docs;Linux 6.6 Docs;The Linux kernel docs v6.6 +ubm-linux66-dkms;linux66-dkms;Linux 6.6 DKMS modules;The Linux kernel DKMS modules v6.6 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu \ No newline at end of file diff --git a/kernel-list.csv b/kernel-list.csv index f8afc25..1bfce8d 100644 --- a/kernel-list.csv +++ b/kernel-list.csv @@ -1,4 +1,4 @@ PAСKAGE_UBM;PAСKAGE;NAME;TAG;DESCRIPTION -ubm-001-linux515,ubm-001-linux515-headers;linux515,linux515-headers;Linux 5.15;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.15 and modules, headers -ubm-001-linux517,ubm-001-linux517-headers;linux517,linux517-headers;Linux 5.17;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.17 and modules, headers -ubm-001-linux66,ubm-001-linux66-headers;linux66,linux66-headers;Linux 6.6;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.6 and modules, headers \ No newline at end of file +ubm-001-linux515,ubm-001-linux515-headers;linux515,linux515-headers;Linux 5.15;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.15 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs +ubm-001-linux61,ubm-001-linux61-headers;linux61,linux61-headers;Linux 6.1;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.1 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs +ubm-001-linux66,ubm-001-linux66-headers;linux66,linux66-headers;Linux 6.6;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.6 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 00a33a5..6ba273e 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -32,7 +32,12 @@ add_custom_target(GLADE ubl-settings-kernel.glade) set(DEPENDFILES ../ubl-settings-kernel.glade + ../ubl-settings-kernel-info.glade + ../ubl-settings-kernel-install.glade + ../ubl-settings-kernel-table-row.glade ../gresource.xml + ../kernel-list.csv + ../kernel-list-addon.csv ../ubl-settings-kernel-banner.png ../ubl-settings-kernel.css ) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index b2c5791..fff4e24 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -17,7 +17,7 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ textdomain(template_ui_LocaleName); GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); textdomain(LocaleName); - gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-kernel"); gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.ini"); @@ -39,6 +39,92 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ } } +info_window *yon_info_window_new(){ + info_window *window = malloc(sizeof(info_window)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_info_path); + + window->window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->InfoLabel = yon_gtk_builder_get_widget(builder,"InfoLabel"); + + return window; +} + +install_window *yon_install_window_new(){ + install_window *window = malloc(sizeof(install_window)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_install_path); + + window->window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->ExecuteButton = yon_gtk_builder_get_widget(builder,"ExecuteButton"); + + window->KernelVersionCombo = yon_gtk_builder_get_widget(builder,"KernelVersionCombo"); + window->DebugCheck = yon_gtk_builder_get_widget(builder,"DebugCheck"); + window->DriversCheck = yon_gtk_builder_get_widget(builder,"DriversCheck"); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + return window; +} + +GtkWidget *yon_tab_row_new(GtkBox *target, char *target_string, main_window *widgets){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); + + GtkWidget *main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); + GtkWidget *icon_box = yon_gtk_builder_get_widget(builder,"IconPackBox"); + GtkWidget *name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + GtkWidget *tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); + GtkWidget *module_check = yon_gtk_builder_get_widget(builder,"ModuleCheck"); + GtkWidget *package_check = yon_gtk_builder_get_widget(builder,"PackageCheck"); + GtkWidget *loaded_radio = yon_gtk_builder_get_widget(builder,"LoadedRadio"); + GtkWidget *description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + gtk_box_pack_start(target,main_box,0,0,0); + + int size; + config_str parsed = yon_char_parse(target_string,&size,";"); + if (size){ + char *name = yon_char_unite("",parsed[2],"\n",parsed[0],"\n",parsed[1],"",NULL); + int types_size; + config_str types_parsed = yon_char_parse(parsed[3],&types_size,", "); + for (int k=0;kStatusSizeGroup,icon_box); + gtk_size_group_add_widget(widgets->KernelSizeGroup,name_label); + gtk_size_group_add_widget(widgets->TagsSizeGroup,tags_box); + gtk_size_group_add_widget(widgets->ModuleSizeGroup,module_check); + gtk_size_group_add_widget(widgets->PackageSizeGroup,package_check); + gtk_size_group_add_widget(widgets->LoaderSizeGroup,loaded_radio); + gtk_size_group_add_widget(widgets->DescriptionSizeGroup,description_label); + + } + return main_box; +} + // standard functions /**config_init() @@ -60,6 +146,69 @@ void config_init(){ main_config.load_mode=1; } + + +void on_update_clicked(GtkWidget *, main_window *widgets){ + if (widgets){}; + +} + +void on_info_clicked(GtkWidget *, main_window *widgets){ + info_window *window = yon_info_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"info_window"); + GtkWidget *current_tree=NULL; + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + current_tree = widgets->KernelsTree; + } else { + current_tree = widgets->AdditionsTree; + } + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(current_tree)),&model,&iter)){ + char *target; + gtk_tree_model_get(model,&iter,4,&target,-1); + int size; + config_str ret = yon_config_load(yon_get_info_command(target),&size); + if (size){ + char *final_text = yon_char_parsed_to_string(ret,size,""); + gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); + free(final_text); + yon_char_parsed_free(ret,size); + } + } + gtk_widget_show(window->window); +} + +void on_changelog_clicked(GtkWidget *, main_window *widgets){ + if (widgets){}; + info_window *window = yon_info_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"changelog_window"); + gtk_widget_show(window->window); +} + +void on_building_clicked(GtkWidget *, main_window *widgets){ + if (widgets){}; + install_window *window = yon_install_window_new(); + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"install_window"); + gtk_widget_show(window->window); + +} + +void on_install_module_toggled(GtkWidget *, char *path, main_window *widgets){ + if (widgets||path){}; + +} + +void on_install_package_toggled(GtkWidget *, char *path, main_window *widgets){ + if (widgets||path){}; + +} + +void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){ + if (widgets||path){}; + +} + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -72,7 +221,44 @@ void yon_main_window_complete(main_window *widgets){ gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); // Custom widgets configuration { + widgets->MainNotebook = yon_gtk_builder_get_widget(builder, "MainNotebook"); + widgets->UpdateButton = yon_gtk_builder_get_widget(builder, "UpdateButton"); + widgets->InfoButton = yon_gtk_builder_get_widget(builder, "InfoButton"); + widgets->LogButton = yon_gtk_builder_get_widget(builder, "LogButton"); + widgets->BuildingButton = yon_gtk_builder_get_widget(builder, "BuildingButton"); + widgets->KernelsUpperTree = yon_gtk_builder_get_widget(builder, "KernelsUpperTree"); + widgets->KernelsTree = yon_gtk_builder_get_widget(builder, "KernelsTree"); + widgets->AdditionsUpperTree = yon_gtk_builder_get_widget(builder, "AdditionsUpperTree"); + widgets->AdditionsTree = yon_gtk_builder_get_widget(builder, "AdditionsTree"); + widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); + widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); + widgets->PackageBox = yon_gtk_builder_get_widget(builder,"PackageBox"); + widgets->StatusSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"StatusSizeGroup")); + widgets->KernelSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"KernelSizeGroup")); + widgets->TagsSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"TagsSizeGroup")); + widgets->ModuleSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"ModuleSizeGroup")); + widgets->PackageSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"PackageSizeGroup")); + widgets->LoaderSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"LoaderSizeGroup")); + widgets->DescriptionSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"DescriptionSizeGroup")); + + g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->LogButton),"clicked",G_CALLBACK(on_changelog_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_install_module_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_install_package_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_boot_toggled),widgets); + GtkWidget *radio_group=NULL; + int kernels_size; + config_str kernels = yon_resource_open_file(kernels_path, &kernels_size); + for (int i=1;iPackageBox),kernels[i],widgets); + GList *list = gtk_container_get_children(GTK_CONTAINER(current)); + GtkWidget *radio = GTK_WIDGET(g_list_nth_data(list,5)); + if (radio_group) gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio),GTK_RADIO_BUTTON(radio_group)); + radio_group = radio; + } } } diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 764d92e..5065646 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -20,13 +20,21 @@ #define _(String) gettext(String) #define glade_path "/com/ublinux/ui/ubl-settings-kernel.glade" +#define glade_info_path "/com/ublinux/ui/ubl-settings-kernel-info.glade" +#define glade_install_path "/com/ublinux/ui/ubl-settings-kernel-install.glade" +#define glade_table_row_path "/com/ublinux/ui/ubl-settings-kernel-table-row.glade" #define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-kernel.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) +#define kernels_path "resource:///com/ublinux/csv/kernel-list.csv" +#define kernels_addon_path "resource:///com/ublinux/csv/kernel-list-addon.csv" + #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-kernel" +#define icon_path "com.ublinux.ubl-settings-kernel" + #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get system PARAMETERS",NULL) #define config_get_local_command "ubconfig --source system get system PARAMETERS" #define config_get_global_command "ubconfig --source global get system PARAMETERS" @@ -35,6 +43,8 @@ #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" +#define yon_get_info_command(target) yon_char_append("pacman ",target) + typedef char* string; string version_application; @@ -47,21 +57,70 @@ typedef struct { typedef struct { template_window_fields + GtkWidget *UpdateButton; + GtkWidget *InfoButton; + GtkWidget *LogButton; + GtkWidget *BuildingButton; + GtkWidget *KernelsUpperTree; + GtkWidget *KernelsTree; + GtkWidget *AdditionsUpperTree; + GtkWidget *AdditionsTree; + GtkWidget *MainNotebook; + GtkWidget *PackageBox; + + GtkListStore *KernelsList; + GtkListStore *AdditionsList; + + GtkSizeGroup *StatusSizeGroup; + GtkSizeGroup *KernelSizeGroup; + GtkSizeGroup *TagsSizeGroup; + GtkSizeGroup *ModuleSizeGroup; + GtkSizeGroup *PackageSizeGroup; + GtkSizeGroup *LoaderSizeGroup; + GtkSizeGroup *DescriptionSizeGroup; } main_window; typedef struct { - GtkWidget *Window; - GtkWidget *HeaderLabel; + GtkWidget *window; + GtkWidget *HeadLabel; + GtkWidget *InfoLabel; +}info_window; - GtkWidget *AlwaysOpenCheck; +typedef struct { + GtkWidget *window; + GtkWidget *HeadLabel; + GtkWidget *StatusBox; - GtkWidget *CloseButton; - GtkWidget *AcceptButton; -} documentation_confirmation_window; + GtkWidget *CancelButton; + GtkWidget *ExecuteButton; + + GtkWidget *KernelVersionCombo; + GtkWidget *DebugCheck; + GtkWidget *DriversCheck; +}install_window; void yon_load_proceed(YON_CONFIG_TYPE type); void config_init(); -void yon_main_window_complete(main_window *widgets); \ No newline at end of file +void yon_main_window_complete(main_window *widgets); + +GtkWidget *yon_tab_row_new(GtkBox *target, char *target_string, main_window *widgets); + +void on_update_clicked(GtkWidget *, main_window *widgets); + +void on_info_clicked(GtkWidget *, main_window *widgets); + +void on_changelog_clicked(GtkWidget *, main_window *widgets); + +void on_building_clicked(GtkWidget *, main_window *widgets); + +void on_install_module_toggled(GtkWidget *, char *path, main_window *widgets); + +void on_install_package_toggled(GtkWidget *, char *path, main_window *widgets); + +void on_boot_toggled(GtkWidget *, char *path, main_window *widgets); + +info_window *yon_info_window_new(); +install_window *yon_install_window_new(); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index e3ccc26..3547b2e 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -1,3 +1,5 @@ #define TITLE_LABEL _("ubl-settings-kernel") #define TITLE_INFO_LABEL _("kernel configuration") + +#define INFO_TITLE_LABEL _("Information") diff --git a/ubl-settings-kernel-info.glade b/ubl-settings-kernel-info.glade new file mode 100644 index 0000000..952306d --- /dev/null +++ b/ubl-settings-kernel-info.glade @@ -0,0 +1,83 @@ + + + + + + 800 + 600 + False + True + com.ublinux.ubl-settings-repomanager + + + True + False + 5 + 5 + 5 + 5 + vertical + + + True + False + 0 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + label + 0 + 0 + + + + + + + + + + True + True + 0 + + + + + + + True + False + True + + + True + False + Kernel settings + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-kernel + + + + + + diff --git a/ubl-settings-kernel-install.glade b/ubl-settings-kernel-install.glade new file mode 100644 index 0000000..1726a18 --- /dev/null +++ b/ubl-settings-kernel-install.glade @@ -0,0 +1,162 @@ + + + + + + 400 + 200 + False + True + com.ublinux.ubl-settings-repomanager + + + + True + False + vertical + + + True + False + vertical + + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + False + Kernel version: + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + + False + True + 0 + + + + + Add debug components + True + True + False + True + + + False + True + 1 + + + + + Add drivers for current hardware components only + True + True + False + True + + + False + True + 2 + + + + + False + True + 1 + + + + + + + True + False + + + True + False + Kernel settings + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-kernel + + + + + Cancel + True + True + True + + + 1 + + + + + Execute + True + True + True + + + end + 2 + + + + + + diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade new file mode 100644 index 0000000..6d7e9ac --- /dev/null +++ b/ubl-settings-kernel-table-row.glade @@ -0,0 +1,149 @@ + + + + + + + True + False + + + True + False + 5 + + + + + + + True + True + 0 + + + + + True + False + True + + + + True + True + 1 + + + + + True + False + vertical + + + + + + + True + True + 2 + + + + + True + True + False + True + + + + + + + True + True + 3 + + + + + True + True + False + True + + + + + + + True + True + 4 + + + + + True + True + False + True + True + + + + + + + True + True + 5 + + + + + True + False + label + True + True + + + + True + True + 6 + + + + diff --git a/ubl-settings-kernel.css b/ubl-settings-kernel.css index 93fc7c6..44349a4 100644 --- a/ubl-settings-kernel.css +++ b/ubl-settings-kernel.css @@ -1,12 +1,34 @@ -.tableborders>box { - border-right-width:0.5px; +.tableborders { + border-width:0.5px 0.5px 0.5px 0.5px; border-style: solid; border-color: @theme_fg_color; } -.tableborders { - border-width:0.5px 0px 0.5px 0.5px; +.tableborderleft { + border-left: 0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tableborderright { + border-right: 0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tablebordertop { + border-top: 0.5px; border-style: solid; border-color: @theme_fg_color; + +} +.tableborderbottom { + border-bottom:0.5px; + border-style: solid; + border-color: @theme_fg_color; + +} +.tablemargin { + padding: 1px; } .thin { margin:0px; @@ -120,4 +142,59 @@ background:transparent; .boxInfoMessOK{ background-color: #f3f0ac; +} + +.tag_red{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + margin:2px; + color:#2f2f2f; + + background-color:#ab709a +} +.tag_blue{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + margin:2px; + color:#2f2f2f; + + background-color:#33aadf +} +.tag_purple{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + margin:2px; + color:#2f2f2f; + + background-color:#ab709a +} +.tag_orange{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + margin:2px; + color:#2f2f2f; + + background-color:#ffac40 +} +.tag_yellow{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + margin:2px; + color:#2f2f2f; + + background-color:#ffd070 +} +.tag_green{ + border-radius: 2px; + border-width: 0.5px; + border-style: solid; + margin:2px; + color:#2f2f2f; + + background-color:#80ff80 } \ No newline at end of file diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 192cfd0..61a9160 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -19,222 +19,25 @@ - + - + - + - + - + + + - + - + - + - - - - - - - False - True - False - fae - - - - - - - True - False - True - gsdrg - - - - - True - False - - - True - False - - - True - False - vertical - - - - - - True - True - 0 - - - - - True - False - vertical - - - True - False - label - 0 - - - False - True - 0 - - - - - True - True - 1 - - - - - True - False - vertical - - - - - - True - True - 2 - - - - - True - False - vertical - - - True - True - False - True - - - - - - False - True - 0 - - - - - False - True - 3 - - - - - True - False - vertical - - - True - True - False - True - - - - - - False - True - 0 - - - - - False - True - 4 - - - - - True - False - vertical - - - True - True - False - True - - - - - - False - True - 0 - - - - - False - True - 5 - - - - - True - False - vertical - - - True - False - label - 0 - - - False - True - 0 - - - - - True - True - 6 - - - - - True @@ -256,8 +59,6 @@ False com.ublinux.libublsettingsui-gtk3.settings-symbolic - - True False @@ -346,13 +147,15 @@ - + True True True False + 5 + 5 5 5 5 @@ -362,96 +165,17 @@ True False - vertical - + True - True - liststore2 - 0 - - - - - - - - - 0 - - - - - - 1 - - - - - - - - - - 2 - - - - - - - - - - 3 - - - - - - - Installed - - - - 4 - 0 - - - - - - - - - - 5 - - - - - - - - - True - - - 6 - - - - - - - - - - 7 - - - - + False + Status + 0 + False @@ -460,151 +184,151 @@ - + True - True - KernelsList - - - Status - - - - 0 - - - - - - 1 - - - - - - - Kernel - - - - 2 - - - - - - - Kernel type - - - - 3 - - - - - - - Module - - - - 4 - - - - + False + Kernel + 0 + + + + False + True + 1 + + + + + True + False + Tags + 0 + + + + False + True + 2 + + + + + True + False + vertical - - Package - - - - 5 - - + + True + False + Installed + 0 + + + False + True + 0 + - - Load + + True + False - - True + + True + False + Module + 0 + - - 6 - + + True + True + 0 + - - - - - Description - - - 7 - + + True + False + Package + 0 + + + + True + True + 1 + + + False + True + 1 + - True + False True - 1 + 3 - - - True - True - 0 - - - - - - - True - False - Kernels - - - False - - - - - True - False - 5 - 5 - 5 - 5 - vertical - - - True - True - liststore3 - - - - - - - - - - - Installed + + True + False + Loader + 0 + + + False + True + 4 + - + + True + False + Description + 0 + + + + True + True + 5 + @@ -614,33 +338,25 @@ - + True True - AdditionsList + never + in - - Status - - - - - Addition - - - - - Module - - - - - Package - - - - - Description + + True + False + + + True + False + vertical + + + + + @@ -650,11 +366,24 @@ 1 + + + + + + True + False + Kernels - 1 + False + + + True @@ -681,4 +410,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.35.1 From ae61d187e02ffdaa82cd46a552e4f1be86311dc3 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 30 Oct 2024 15:50:19 +0600 Subject: [PATCH 03/37] Tables WIP --- source/ubl-settings-kernel.c | 11 +++--- source/ubl-settings-kernel.h | 5 +-- ubl-settings-kernel-table-row.glade | 1 + ubl-settings-kernel.glade | 54 +++++++++++++++++++++++++---- 4 files changed, 58 insertions(+), 13 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index fff4e24..44443a3 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -71,7 +71,7 @@ install_window *yon_install_window_new(){ return window; } -GtkWidget *yon_tab_row_new(GtkBox *target, char *target_string, main_window *widgets){ +GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); GtkWidget *main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); @@ -82,7 +82,7 @@ GtkWidget *yon_tab_row_new(GtkBox *target, char *target_string, main_window *wid GtkWidget *package_check = yon_gtk_builder_get_widget(builder,"PackageCheck"); GtkWidget *loaded_radio = yon_gtk_builder_get_widget(builder,"LoadedRadio"); GtkWidget *description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); - gtk_box_pack_start(target,main_box,0,0,0); + gtk_list_box_insert(target,main_box,-1); int size; config_str parsed = yon_char_parse(target_string,&size,";"); @@ -229,10 +229,11 @@ void yon_main_window_complete(main_window *widgets){ widgets->KernelsUpperTree = yon_gtk_builder_get_widget(builder, "KernelsUpperTree"); widgets->KernelsTree = yon_gtk_builder_get_widget(builder, "KernelsTree"); widgets->AdditionsUpperTree = yon_gtk_builder_get_widget(builder, "AdditionsUpperTree"); - widgets->AdditionsTree = yon_gtk_builder_get_widget(builder, "AdditionsTree"); + widgets->AdditionsTree = yon_gtk_builder_get_widget(builder, "TestListBox"); widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); - widgets->PackageBox = yon_gtk_builder_get_widget(builder,"PackageBox"); + widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox"); + widgets->AdditionsPackageBox = yon_gtk_builder_get_widget(builder,"AdditionsPackageBox"); widgets->StatusSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"StatusSizeGroup")); widgets->KernelSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"KernelSizeGroup")); widgets->TagsSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"TagsSizeGroup")); @@ -253,7 +254,7 @@ void yon_main_window_complete(main_window *widgets){ int kernels_size; config_str kernels = yon_resource_open_file(kernels_path, &kernels_size); for (int i=1;iPackageBox),kernels[i],widgets); + GtkWidget *current = yon_tab_row_new(GTK_LIST_BOX(widgets->KernelsPackageBox),kernels[i],widgets); GList *list = gtk_container_get_children(GTK_CONTAINER(current)); GtkWidget *radio = GTK_WIDGET(g_list_nth_data(list,5)); if (radio_group) gtk_radio_button_join_group(GTK_RADIO_BUTTON(radio),GTK_RADIO_BUTTON(radio_group)); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 5065646..d3822b7 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -66,7 +66,8 @@ typedef struct { GtkWidget *AdditionsUpperTree; GtkWidget *AdditionsTree; GtkWidget *MainNotebook; - GtkWidget *PackageBox; + GtkWidget *KernelsPackageBox; + GtkWidget *AdditionsPackageBox; GtkListStore *KernelsList; GtkListStore *AdditionsList; @@ -106,7 +107,7 @@ void config_init(); void yon_main_window_complete(main_window *widgets); -GtkWidget *yon_tab_row_new(GtkBox *target, char *target_string, main_window *widgets); +GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); void on_update_clicked(GtkWidget *, main_window *widgets); diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index 6d7e9ac..c6a162f 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -31,6 +31,7 @@ True False True + False - - - True - True - 0 - - - - - True - False - True - False - - - - True - True - 1 - - - - - True - False - vertical - + + True + False + vertical + + + + + + False + True + 2 + - - - - True - True - 2 - - - - - True - True - False - True - + + True + False + vertical + + + + + + False + True + 3 + + + + + True + False + center + vertical + 5 + + + True + True + False + True + + + True + False + Install + + + + + False + True + 0 + + + + + True + False + True + + + True + False + Remove + + + + + False + True + 1 + + + + + Changelog + True + True + True + + + False + True + 2 + + + + + False + True + end + 6 + - - True + False True - 3 + 0 - + True - True - False - True + False + 5 + + + Expand + True + True + True + + + False + True + 0 + + - - - - True - True - 4 - - - - - True - True - False - True - True - - True + False True - 5 - - - - - True - False - label - True - True - - - - True - True - 6 + 1 diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 4ef5717..5451c58 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -16,29 +16,6 @@ - - - feasf - feasfge - False - False - - - - - grdtbrftgbh - False - False - - - - - - False - False - - - @@ -119,6 +96,7 @@ True True True + Open package information image2 + + + False + True + 4 + False True - 1 + end + 4 + + + + + True + False + The Linux kernel v5.15 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs + True + 0 + + + True + True + end + 6 + diff --git a/ubl-settings-kernel.css b/ubl-settings-kernel.css index 44349a4..cec77c8 100644 --- a/ubl-settings-kernel.css +++ b/ubl-settings-kernel.css @@ -144,6 +144,11 @@ background:transparent; background-color: #f3f0ac; } +.listfix row:selected * .buttonlistfx:active * { + color: @theme_fg_color; +} + + .tag_red{ border-radius: 2px; border-width: 0.5px; diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 5451c58..abc4b95 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -17,6 +17,9 @@ + + + @@ -39,6 +42,9 @@ + + + True False @@ -164,187 +170,11 @@ 5 5 vertical - - - False - - - True - False - Status - 0 - - - - False - True - 0 - - - - - True - False - Kernel - 0 - - - - False - True - 1 - - - - - True - False - Tags - 0 - - - - False - True - 2 - - - - - True - False - vertical - - - True - False - Installed - 0 - - - - False - True - 0 - - - - - True - False - - - True - False - Module - 0 - - - - True - True - 0 - - - - - True - False - Package - 0 - - - - True - True - 1 - - - - - False - True - 1 - - - - - False - True - 3 - - - - - True - False - Loader - 0 - - - - False - True - 4 - - - - - True - False - Description - 0 - - - - True - True - 5 - - - - - False - True - 0 - - True True never - in True @@ -354,6 +184,10 @@ True False + none + @@ -365,9 +199,6 @@ 1 - @@ -433,39 +264,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 2.35.1 From 3685d14aa63a16db2a8b7e12d0ddad669497be5f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Sat, 2 Nov 2024 18:02:58 +0600 Subject: [PATCH 06/37] Buttons on the kernels page, finished working with table --- source/CMakeLists.txt | 1 - source/ubl-cmake.in | 1 - source/ubl-settings-kernel.c | 247 +++++++++++++++--------- source/ubl-settings-kernel.h | 53 +++++- source/ubl-strings.h | 5 +- ubl-settings-kernel-info.glade | 3 +- ubl-settings-kernel-table-row.glade | 18 +- ubl-settings-kernel.glade | 285 ++++++++++++++++++++-------- 8 files changed, 428 insertions(+), 185 deletions(-) delete mode 100644 source/ubl-cmake.in diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 6ba273e..315f5a8 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -62,7 +62,6 @@ add_custom_target( DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} ) -add_definitions(-DVTE_INCLUDE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ -O2 -pipe -fno-plt -fexceptions \ diff --git a/source/ubl-cmake.in b/source/ubl-cmake.in deleted file mode 100644 index d4623a7..0000000 --- a/source/ubl-cmake.in +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine WEBKIT_FOUND diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 19cc9de..fea6fba 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -39,6 +39,19 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ } } +void yon_interface_update(main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); + for (guint i=0;iKernelsPackageBox),kernels[i],widgets); + gtk_widget_set_can_focus(gtk_widget_get_parent(current),0); + } +} + info_window *yon_info_window_new(){ info_window *window = malloc(sizeof(info_window)); @@ -89,26 +102,89 @@ int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name return 0; } +gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets){ + + yon_interface_update(widgets); + return G_SOURCE_REMOVE; +} + +void *yon_command_execute_async(char *command,main_window *widgets){ + yon_terminal_integrated_start(widgets->InstallTerminal,command); + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); + vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + return NULL; +} + +void on_module_install_clicked(GtkWidget *,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *command = install_command(tab->module); + yon_command_execute_async(command,widgets); + +} + +void on_package_install_clicked(GtkWidget *,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *command = install_command(tab->package); + yon_command_execute_async(command,widgets); + +} + +void on_module_remove_clicked(GtkWidget *,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *command = remove_command(tab->module); + yon_command_execute_async(command,widgets); + +} + +void on_package_remove_clicked(GtkWidget *,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *command = remove_command(tab->package); + yon_command_execute_async(command,widgets); + +} + GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); - GtkWidget *main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); - GtkWidget *icon_box = yon_gtk_builder_get_widget(builder,"IconBox"); - GtkWidget *name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); - GtkWidget *install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); - GtkWidget *run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); - GtkWidget *tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); - GtkWidget *description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); - GtkWidget *remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); - GtkWidget *remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); - GtkWidget *install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); - GtkWidget *install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); - gtk_list_box_insert(target,main_box,-1); + kernels_tab *tab = malloc(sizeof(kernels_tab)); + tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); + tab->icon_box = yon_gtk_builder_get_widget(builder,"IconBox"); + tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); + tab->run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); + tab->tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); + tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); + tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); + tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); + tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); + tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton"); + + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"tab",tab); + g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab); + gtk_list_box_insert(target,tab->main_box,-1); int size; config_str parsed = yon_char_parse(target_string,&size,";"); if (size){ - char *name = yon_char_unite("",parsed[2],"\n",MODULE_LABEL," ",parsed[0],"\n",PACKAGE_LABEL," ",parsed[1],"",NULL); + char *boot_run = config(KERNEL_BOOT_parameter); + if (!yon_char_is_empty(boot_run)&&!strcmp(parsed[1],boot_run)){ + yon_tag_add(GTK_BOX(tab->run_tags_box),BOOT_RUN_LABEL,"tag_orange",restart_icon_path); + } + tab->name = yon_char_new(parsed[0]); + tab->module = yon_char_new(parsed[1]); + tab->package = yon_char_new(parsed[2]); + char *name = yon_char_unite("",tab->name,"\n",MODULE_LABEL," ",tab->module,"\n",PACKAGE_LABEL," ",tab->package,"",NULL); int types_size; config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); for (int k=0;ktags_box),types_parsed[k],tag_type,NULL); } - char *check_install_command = get_package_is_installed_command(parsed[1]); + char *check_install_command = get_package_is_installed_command(tab->module); if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",module_icon_path); - gtk_widget_show(remove_module_button); - gtk_widget_show(remove_package_button); - gtk_widget_hide(install_module_button); - gtk_widget_hide(install_package_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",module_icon_path); + GtkWidget *module_image = gtk_image_new_from_icon_name(module_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); + gtk_box_pack_start(GTK_BOX(tab->icon_box),module_image,0,0,2); + GtkWidget *package_image = gtk_image_new_from_icon_name(package_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); + gtk_box_pack_start(GTK_BOX(tab->icon_box),package_image,0,0,2); + gtk_widget_show(module_image); + gtk_widget_show(package_image); + gtk_widget_show(tab->remove_module_button); + gtk_widget_show(tab->remove_package_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_hide(tab->install_package_button); } else { free(check_install_command); - check_install_command = get_package_is_installed_command(parsed[2]); + check_install_command = get_package_is_installed_command(tab->package); if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",package_icon_path); - gtk_widget_hide(install_package_button); - gtk_widget_show(remove_package_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",package_icon_path); + GtkWidget *package_image = gtk_image_new_from_icon_name(package_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); + gtk_box_pack_start(GTK_BOX(tab->icon_box),package_image,0,0,2); + gtk_widget_show(package_image); + gtk_widget_hide(tab->install_package_button); + gtk_widget_show(tab->remove_package_button); } } yon_char_parsed_free(types_parsed,types_size); - gtk_label_set_markup(GTK_LABEL(name_label),name); - gtk_label_set_text(GTK_LABEL(description_label),parsed[6]); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->StatusSizeGroup),icon_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),name_label); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tags_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),install_tags_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),run_tags_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),description_label); + gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[6]); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->StatusSizeGroup),tab->icon_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),tab->name_label); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tab->tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),tab->run_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label); } - return main_box; + return tab->main_box; } // standard functions @@ -184,8 +269,7 @@ void config_init(){ void on_update_clicked(GtkWidget *, main_window *widgets){ - if (widgets){}; - + yon_interface_update(widgets); } void on_info_clicked(GtkWidget *, main_window *widgets){ @@ -204,14 +288,12 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,1))); char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list3,0)))); int size; - char *parameter = yon_char_divide_search(target_str,"\n",-1); - free(parameter); - parameter = yon_char_replace(target_str,"\n",","); - int sz; - config_str parsed = yon_char_parse(parameter,&sz,","); - free(parameter); - parameter = yon_char_parsed_to_string(parsed,sz," "); - config_str info = yon_config_load(get_package_info_command(parameter),&size); + config_str parsed = yon_char_parse(target_str,&size,"\n"); + char *package=NULL; + if (size&&(package = strstr(parsed[2],": "))){ + package+=2; + } + config_str info = yon_config_load(get_package_info_command(package),&size); if (size!=-1){ char *final_text = yon_char_parsed_to_string(info,size,""); gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); @@ -224,36 +306,18 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ gtk_widget_show(window->window); } -void on_changelog_clicked(GtkWidget *, main_window *widgets){ +void on_changelog_clicked(GtkWidget *, kernels_tab *tab){ info_window *window = yon_info_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"changelog_window"); - GtkWidget *current_tree=NULL; - if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ - current_tree = widgets->KernelsPackageBox; + yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(gtk_widget_get_toplevel(tab->main_box)),INFO_TITLE_LABEL,icon_path,"changelog_window"); + int size; + config_str info = yon_config_load(yon_debug_output("%s\n",get_kernel_changelog_command(tab->package)),&size); + if (size!=-1){ + char *full_text = yon_char_parsed_to_string(info,size,""); + gtk_label_set_text(GTK_LABEL(window->InfoLabel),full_text); + free(full_text); + yon_char_parsed_free(info,size); } else { - current_tree = widgets->AdditionsPackageBox; - } - GtkListBoxRow *target = gtk_list_box_get_selected_row(GTK_LIST_BOX(current_tree)); - if (target){ - GList *list = gtk_container_get_children(GTK_CONTAINER(target)); - GList *list2 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); - GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,1))); - char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list3,0)))); - int size; - char *parameter = yon_char_divide_search(target_str,"\n",-1); - free(parameter); - parameter = yon_char_replace(target_str,"\n",","); - int sz; - config_str parsed = yon_char_parse(parameter,&sz,","); - config_str info = yon_config_load(yon_debug_output("%s\n",get_kernel_changelog_command(parsed[0])),&size); - if (size!=-1){ - char *final_text = yon_char_parsed_to_string(info,size,""); - gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); - free(final_text); - yon_char_parsed_free(info,size); - } else { - gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); - } + gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); } gtk_widget_show(window->window); } @@ -266,19 +330,22 @@ void on_building_clicked(GtkWidget *, main_window *widgets){ } -void on_install_module_toggled(GtkWidget *, char *path, main_window *widgets){ - if (widgets||path){}; - -} - -void on_install_package_toggled(GtkWidget *, char *path, main_window *widgets){ +void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){ if (widgets||path){}; } -void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){ - if (widgets||path){}; - +void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ + int opened = gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->TerminalRevealer)); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),!opened); + switch (opened){ + case 0: { + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->TerminalRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); + } break; + case 1: { + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->TerminalRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); + } break; + } } /**yon_main_window_complete(main_window *widgets) @@ -302,6 +369,12 @@ void yon_main_window_complete(main_window *widgets){ widgets->KernelsTree = yon_gtk_builder_get_widget(builder, "KernelsTree"); widgets->AdditionsUpperTree = yon_gtk_builder_get_widget(builder, "AdditionsUpperTree"); widgets->AdditionsTree = yon_gtk_builder_get_widget(builder, "TestListBox"); + widgets->MainRevealer = yon_gtk_builder_get_widget(builder, "MainRevealer"); + widgets->MoreButton = yon_gtk_builder_get_widget(builder, "MoreButton"); + widgets->InstallationProgress = yon_gtk_builder_get_widget(builder, "InstallationProgress"); + widgets->InstallTerminal = yon_gtk_builder_get_widget(builder, "InstallTerminal"); + widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); + widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox"); @@ -315,15 +388,15 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),widgets); g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->LogButton),"clicked",G_CALLBACK(on_changelog_clicked),widgets); g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->MoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); + g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); - int kernels_size; - config_str kernels = yon_resource_open_file(kernels_path, &kernels_size); - for (int i=1;iKernelsPackageBox),kernels[i],widgets); - gtk_widget_set_can_focus(gtk_widget_get_parent(current),0); - } + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); + vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->MainRevealer); + + yon_interface_update(widgets); } yon_load_proceed(YON_CONFIG_LOCAL); } diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 4acaecd..7b13416 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -7,6 +8,7 @@ #include #include #include +#define VTE_INCLUDE #include #include #include @@ -31,6 +33,8 @@ #define kernels_addon_path "resource:///com/ublinux/csv/kernel-list-addon.csv" #define module_icon_path "com.ublinux.libublsettingsui-gtk3.cubes-symbolic" #define package_icon_path "com.ublinux.libublsettingsui-gtk3.dropbox-symbolic" +#define run_icon_path "com.ublinux.libublsettingsui-gtk3.play-symbolic" +#define restart_icon_path "com.ublinux.libublsettingsui-gtk3.reset-symbolic" #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-kernel" @@ -41,6 +45,9 @@ #define get_package_info_command(target) yon_char_append("pacman -Q --info ",target) #define get_package_is_installed_command(target) yon_char_append("pacman -Qqs ",target) +#define install_command(target) yon_char_append("pacman -S --noconfirm ",target) +#define remove_command(target) yon_char_append("pacman -R --noconfirm ",target) + #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get boot KERNEL_BOOT",NULL) #define config_get_local_command "ubconfig --source system get boot KERNEL_BOOT" #define config_get_global_command "ubconfig --source global get boot KERNEL_BOOT" @@ -49,6 +56,8 @@ #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" +#define KERNEL_BOOT_parameter "KERNEL_BOOT" + typedef char* string; string version_application; @@ -82,6 +91,13 @@ typedef struct { GtkSizeGroup *InstallSizeGroup; GtkSizeGroup *RunSizeGroup; GtkSizeGroup *DescriptionSizeGroup; + + GtkWidget *MainRevealer; + GtkWidget *TerminalRevealer; + GtkWidget *InstallTerminal; + GtkWidget *InstallationProgress; + GtkWidget *MoreButton; + GtkWidget *TerminalOverlay; } main_window; @@ -104,12 +120,41 @@ typedef struct { GtkWidget *DriversCheck; }install_window; +typedef struct { + GtkWidget *main_box; + GtkWidget *icon_box; + GtkWidget *name_label; + GtkWidget *install_tags_box; + GtkWidget *run_tags_box; + GtkWidget *tags_box; + GtkWidget *description_label; + GtkWidget *remove_module_button; + GtkWidget *remove_package_button; + GtkWidget *install_module_button; + GtkWidget *install_package_button; + GtkWidget *changelog_button; + char *module; + char *package; + char *name; + +} kernels_tab; + +void yon_interface_update(main_window *widgets); + void yon_load_proceed(YON_CONFIG_TYPE type); void config_init(); void yon_main_window_complete(main_window *widgets); +gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets); +void *yon_command_execute_async(char *command,main_window *widgets); + +void on_module_install_clicked(GtkWidget *,dictionary *dict); +void on_package_install_clicked(GtkWidget *,dictionary *dict); +void on_module_remove_clicked(GtkWidget *,dictionary *dict); +void on_package_remove_clicked(GtkWidget *,dictionary *dict); + int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name); GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); @@ -117,15 +162,13 @@ void on_update_clicked(GtkWidget *, main_window *widgets); void on_info_clicked(GtkWidget *, main_window *widgets); -void on_changelog_clicked(GtkWidget *, main_window *widgets); +void on_changelog_clicked(GtkWidget *, kernels_tab *tab); void on_building_clicked(GtkWidget *, main_window *widgets); -void on_install_module_toggled(GtkWidget *, char *path, main_window *widgets); - -void on_install_package_toggled(GtkWidget *, char *path, main_window *widgets); - void on_boot_toggled(GtkWidget *, char *path, main_window *widgets); +void on_terminal_revealer_open(GtkWidget *, main_window *widgets); + info_window *yon_info_window_new(); install_window *yon_install_window_new(); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 713434a..9e5d9b7 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -7,8 +7,9 @@ #define MODULE_LABEL _("Module:") #define PACKAGE_LABEL _("Package:") -#define PACKAGE_NOT_FOUND_LABEL _("Packages were not found") +#define PACKAGE_NOT_FOUND_LABEL _("Package were not found") #define CHANGELOG_NOT_FOUND_LABEL _("Changelog was not found") #define PACKAGE_INSTALLED_LABEL _("Package installed") -#define MODULE_INSTALLED_LABEL _("Module installed") \ No newline at end of file +#define MODULE_INSTALLED_LABEL _("Module installed") +#define BOOT_RUN_LABEL _("Startup boot") \ No newline at end of file diff --git a/ubl-settings-kernel-info.glade b/ubl-settings-kernel-info.glade index 716fa82..02b9d6b 100644 --- a/ubl-settings-kernel-info.glade +++ b/ubl-settings-kernel-info.glade @@ -1,7 +1,8 @@ - + + 800 600 diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index 6f09588..4978e97 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -1,5 +1,5 @@ - + @@ -35,9 +35,6 @@ True False - <b>Linux 5.15</b> -Modules: ubm-001-linux515 -Packages: linux515 True False 0 @@ -113,6 +110,9 @@ Packages: linux515 True True True + False @@ -126,6 +126,9 @@ Packages: linux515 True True True + False @@ -138,6 +141,9 @@ Packages: linux515 Remove module True True + False @@ -150,6 +156,9 @@ Packages: linux515 Remove package True True + False @@ -185,7 +194,6 @@ Packages: linux515 True False - The Linux kernel v5.15 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs True 0 diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index abc4b95..36f286a 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -2,6 +2,7 @@ + @@ -42,9 +43,140 @@ + + True + False + end + slide-up + True + + + True + False + vertical + 5 + + + True + False + slide-up + + + True + False + + + True + False + True + natural + UTF-8 + True + True + False + + + True + True + 0 + + + + + True + False + vertical + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + False + 0 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + + + True + False + center + + + True + True + 0 + + + + + More + True + True + True + + + False + True + 2 + + + + + + + + + + + + False + True + 1 + + + + + + + + + 100 + 1 + 10 + True False @@ -55,11 +187,6 @@ False com.ublinux.libublsettingsui-gtk3.important-symbolic - - True - False - com.ublinux.libublsettingsui-gtk3.source-symbolic - True False @@ -114,23 +241,6 @@ 1 - - - True - True - True - Open changelog - image3 - - - - False - True - 2 - - True @@ -156,97 +266,106 @@ - + True - True + False - + True - False - 5 - 5 - 5 - 5 - 5 - 5 - vertical + True - + True - True - never + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical - + True - False - 5 + True + never - + True False - none - + 5 + + + True + False + False + + + + + True + True + 1 + + + + + True + False + Kernels + - True - True - 1 + False - - - - - True - False - Kernels - - - False - - - - - True - True - 5 - 5 - 5 - 5 - in - + True - False + True + 5 5 + 5 + 5 + in - + True False + 5 + + + True + False + + + + 1 + + + + + True + False + Additions + + + 1 + False + - 1 - - - - - True - False - Additions - - - 1 - False + -1 -- 2.35.1 From bd95e6459797146d88ab2fb895143409cd4fa8df Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 5 Nov 2024 17:55:30 +0600 Subject: [PATCH 07/37] Design changes --- source/ubl-settings-kernel.c | 96 ++++++++++++++++------ source/ubl-settings-kernel.h | 14 +++- ubl-settings-kernel-install.glade | 19 ++++- ubl-settings-kernel-table-row.glade | 121 +++++++++++++++++++++++----- ubl-settings-kernel.glade | 25 +++--- 5 files changed, 212 insertions(+), 63 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index fea6fba..988e330 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -77,6 +77,7 @@ install_window *yon_install_window_new(){ window->ExecuteButton = yon_gtk_builder_get_widget(builder,"ExecuteButton"); window->KernelVersionCombo = yon_gtk_builder_get_widget(builder,"KernelVersionCombo"); + window->FilenameEntry = yon_gtk_builder_get_widget(builder,"FilenameEntry"); window->DebugCheck = yon_gtk_builder_get_widget(builder,"DebugCheck"); window->DriversCheck = yon_gtk_builder_get_widget(builder,"DriversCheck"); @@ -103,12 +104,16 @@ int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name } gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets){ - + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),0); yon_interface_update(widgets); return G_SOURCE_REMOVE; } void *yon_command_execute_async(char *command,main_window *widgets){ + gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),1); + gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); yon_terminal_integrated_start(widgets->InstallTerminal,command); glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); @@ -152,8 +157,13 @@ GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window kernels_tab *tab = malloc(sizeof(kernels_tab)); tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); - tab->icon_box = yon_gtk_builder_get_widget(builder,"IconBox"); tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); + tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); tab->run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); tab->tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); @@ -184,7 +194,9 @@ GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window tab->name = yon_char_new(parsed[0]); tab->module = yon_char_new(parsed[1]); tab->package = yon_char_new(parsed[2]); - char *name = yon_char_unite("",tab->name,"\n",MODULE_LABEL," ",tab->module,"\n",PACKAGE_LABEL," ",tab->package,"",NULL); + char *name = yon_char_unite("",tab->name,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); int types_size; config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); for (int k=0;kmodule); if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",module_icon_path); - GtkWidget *module_image = gtk_image_new_from_icon_name(module_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(tab->icon_box),module_image,0,0,2); - GtkWidget *package_image = gtk_image_new_from_icon_name(package_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(tab->icon_box),package_image,0,0,2); - gtk_widget_show(module_image); - gtk_widget_show(package_image); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); gtk_widget_show(tab->remove_module_button); gtk_widget_show(tab->remove_package_button); gtk_widget_hide(tab->install_module_button); gtk_widget_hide(tab->install_package_button); - } else { + } + { free(check_install_command); check_install_command = get_package_is_installed_command(tab->package); if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",package_icon_path); - GtkWidget *package_image = gtk_image_new_from_icon_name(package_icon_path,GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(tab->icon_box),package_image,0,0,2); - gtk_widget_show(package_image); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); gtk_widget_hide(tab->install_package_button); gtk_widget_show(tab->remove_package_button); } } yon_char_parsed_free(types_parsed,types_size); gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_markup(GTK_LABEL(tab->module_label),module); + gtk_label_set_markup(GTK_LABEL(tab->package_label),package); gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[6]); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->StatusSizeGroup),tab->icon_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),tab->name_label); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tab->tags_box); gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),tab->run_tags_box); @@ -266,12 +274,18 @@ void config_init(){ main_config.load_mode=1; } - - void on_update_clicked(GtkWidget *, main_window *widgets){ yon_interface_update(widgets); } +void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){ + if (row){ + gtk_widget_set_sensitive(widgets->InfoButton,1); + } else { + gtk_widget_set_sensitive(widgets->InfoButton,0); + } +} + void on_info_clicked(GtkWidget *, main_window *widgets){ info_window *window = yon_info_window_new(); yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"info_window"); @@ -285,12 +299,12 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ if (target){ GList *list = gtk_container_get_children(GTK_CONTAINER(target)); GList *list2 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); - GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,1))); - char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list3,0)))); + GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,0))); + GList *list4 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list3,2))); + char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list4,1)))); int size; - config_str parsed = yon_char_parse(target_str,&size,"\n"); char *package=NULL; - if (size&&(package = strstr(parsed[2],": "))){ + if ((package = strstr(target_str,": "))){ package+=2; } config_str info = yon_config_load(get_package_info_command(package),&size); @@ -298,7 +312,6 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ char *final_text = yon_char_parsed_to_string(info,size,""); gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); free(final_text); - yon_char_parsed_free(info,size); } else { gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); } @@ -322,12 +335,38 @@ void on_changelog_clicked(GtkWidget *, kernels_tab *tab){ gtk_widget_show(window->window); } +void on_build_execute(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + install_window *window = yon_dictionary_get_data(dict->first->next,install_window*); + int debug = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DebugCheck)); + int drivers = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DriversCheck)); + char *target = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->KernelVersionCombo)); + char *filename = (char*)gtk_entry_get_text(GTK_ENTRY(window->FilenameEntry)); + char *command = build_command(target,filename,debug,drivers); + yon_command_execute_async(command,widgets); +} + void on_building_clicked(GtkWidget *, main_window *widgets){ if (widgets){}; install_window *window = yon_install_window_new(); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"install_window"); - gtk_widget_show(window->window); + g_signal_connect(G_OBJECT(window->ExecuteButton),"clicked",G_CALLBACK(on_build_execute),dict); + int size; + config_str kernels = yon_resource_open_file(kernels_path,&size); + for (int i=1;iKernelVersionCombo),parsed[2],parsed[0]); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(window->KernelVersionCombo),0); + } + + gtk_widget_show(window->window); } void on_boot_toggled(GtkWidget *, char *path, main_window *widgets){ @@ -375,6 +414,7 @@ void yon_main_window_complete(main_window *widgets){ widgets->InstallTerminal = yon_gtk_builder_get_widget(builder, "InstallTerminal"); widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); + widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll"); widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox"); @@ -390,8 +430,14 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets); g_signal_connect(G_OBJECT(widgets->MoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); + g_signal_connect(G_OBJECT(widgets->KernelsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->AdditionsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); + GdkRGBA rgba; + vte_terminal_get_color_background_for_draw(VTE_TERMINAL(widgets->InstallTerminal),&rgba); + vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InstallTerminal),&rgba); + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->MainRevealer); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 7b13416..65b33e0 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -42,12 +42,14 @@ #define icon_path "com.ublinux.ubl-settings-kernel" #define get_kernel_changelog_command(target) yon_char_unite("find /usr/lib/modules/ -maxdepth 2 -type f -iname \"pkgbase\" -exec grep -il \"",target,"\" {} + | xargs dirname | xargs -I {} cat \"{}/changelog\"", NULL) -#define get_package_info_command(target) yon_char_append("pacman -Q --info ",target) +#define get_package_info_command(target) yon_char_append("pacman -Si ",target) #define get_package_is_installed_command(target) yon_char_append("pacman -Qqs ",target) #define install_command(target) yon_char_append("pacman -S --noconfirm ",target) #define remove_command(target) yon_char_append("pacman -R --noconfirm ",target) +#define build_command(target,filename,debug_bool,drivers_bool) yon_char_unite("ubmkuird -l -n ",filename," -k ",(debug_bool)?"--addon ":"",(drivers_bool)?"-H ":"",target,NULL) + #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get boot KERNEL_BOOT",NULL) #define config_get_local_command "ubconfig --source system get boot KERNEL_BOOT" #define config_get_global_command "ubconfig --source global get boot KERNEL_BOOT" @@ -98,6 +100,7 @@ typedef struct { GtkWidget *InstallationProgress; GtkWidget *MoreButton; GtkWidget *TerminalOverlay; + GtkWidget *TerminalScroll; } main_window; @@ -116,14 +119,18 @@ typedef struct { GtkWidget *ExecuteButton; GtkWidget *KernelVersionCombo; + GtkWidget *FilenameEntry; GtkWidget *DebugCheck; GtkWidget *DriversCheck; }install_window; typedef struct { GtkWidget *main_box; - GtkWidget *icon_box; GtkWidget *name_label; + GtkWidget *module_label; + GtkWidget *package_label; + GtkWidget *module_icon; + GtkWidget *package_icon; GtkWidget *install_tags_box; GtkWidget *run_tags_box; GtkWidget *tags_box; @@ -155,11 +162,14 @@ void on_package_install_clicked(GtkWidget *,dictionary *dict); void on_module_remove_clicked(GtkWidget *,dictionary *dict); void on_package_remove_clicked(GtkWidget *,dictionary *dict); +void on_build_execute(GtkWidget *, dictionary *dict); int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name); GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); void on_update_clicked(GtkWidget *, main_window *widgets); +void on_selection_changed(GtkWidget *self,GtkListBoxRow* row,main_window *widgets); + void on_info_clicked(GtkWidget *, main_window *widgets); void on_changelog_clicked(GtkWidget *, kernels_tab *tab); diff --git a/ubl-settings-kernel-install.glade b/ubl-settings-kernel-install.glade index 1726a18..ff1f9d4 100644 --- a/ubl-settings-kernel-install.glade +++ b/ubl-settings-kernel-install.glade @@ -1,5 +1,5 @@ - + @@ -60,6 +60,7 @@ True False + 0 True @@ -74,6 +75,18 @@ 0 + + + True + True + ublinux + + + False + True + 1 + + Add debug components @@ -85,7 +98,7 @@ False True - 1 + 2 @@ -99,7 +112,7 @@ False True - 2 + 3 diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index 4978e97..bfc8643 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -8,41 +8,120 @@ False 15 - + True False center vertical - 5 + 1 - + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Name + True + False + 0 + + + True + True + 1 + + + + + False + True + 0 + - + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Module + 0 + + + True + True + 1 + + + + + False + True + 1 + - - - False - True - 0 - - - - - True - False - + True False - True - False - 0 + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Package + 0 + + + True + True + 1 + + - True + False True - 0 + 2 diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 36f286a..02b42e0 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -1,5 +1,5 @@ - + @@ -43,12 +43,19 @@ + + + + + 100 + 1 + 10 + True False end slide-up - True True @@ -69,6 +76,7 @@ True False True + adjustment1 natural UTF-8 True @@ -82,10 +90,11 @@ - + True False vertical + adjustment1 False @@ -169,14 +178,6 @@ - - - - - 100 - 1 - 10 - True False @@ -227,6 +228,7 @@ True + False True True Open package information @@ -333,7 +335,6 @@ 5 5 5 - in True -- 2.35.1 From b3e3fd01c0a9303143452656462244aab93ef589 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 6 Nov 2024 18:01:23 +0600 Subject: [PATCH 08/37] 2nd page added. rework for optimisation WIP --- gresource.xml | 1 + source/CMakeLists.txt | 3 +- source/ubl-settings-kernel.c | 461 ++++++++++++++---- source/ubl-settings-kernel.h | 48 +- ubl-settings-kernel-additions-table-row.glade | 245 ++++++++++ ubl-settings-kernel-table-row.glade | 28 +- 6 files changed, 677 insertions(+), 109 deletions(-) create mode 100644 ubl-settings-kernel-additions-table-row.glade diff --git a/gresource.xml b/gresource.xml index 0d500b3..3449e5e 100644 --- a/gresource.xml +++ b/gresource.xml @@ -5,6 +5,7 @@ ubl-settings-kernel-info.glade ubl-settings-kernel-install.glade ubl-settings-kernel-table-row.glade + ubl-settings-kernel-additions-table-row.glade ubl-settings-kernel.css diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 315f5a8..450e841 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -35,6 +35,7 @@ set(DEPENDFILES ../ubl-settings-kernel-info.glade ../ubl-settings-kernel-install.glade ../ubl-settings-kernel-table-row.glade + ../ubl-settings-kernel-additions-table-row.glade ../gresource.xml ../kernel-list.csv ../kernel-list-addon.csv @@ -66,7 +67,7 @@ add_custom_target( set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ -O2 -pipe -fno-plt -fexceptions \ -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ - -fstack-clash-protection -fcf-protection") + -fstack-clash-protection -fcf-protection -fsanitize=thread") set(SOURCE_FILES ubl-settings-kernel.c diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 988e330..b8b0071 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -39,17 +39,101 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ } } -void yon_interface_update(main_window *widgets){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); - for (guint i=0;iKernelsPackageBox)); + for (guint i=0;iAdditionsPackageBox)); + for (guint i=0;iKernelsPackageBox),kernels[i],widgets); + if (!yon_char_is_empty(boot_run)&&!strcmp(tab->package,boot_run)){ + yon_tag_add(GTK_BOX(tab->run_tags_box),BOOT_RUN_LABEL,"tag_orange",NULL); + gtk_widget_hide(tab->launch_button); + gtk_widget_hide(tab->remove_module_button); + gtk_widget_hide(tab->remove_package_button); + } + gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); + } + yon_char_parsed_free(kernels,kernels_size); + kernels = yon_resource_open_file(kernels_addon_path, &kernels_size); for (int i=1;iKernelsPackageBox),kernels[i],widgets); - gtk_widget_set_can_focus(gtk_widget_get_parent(current),0); + additions_kernels_tab *tab = yon_additions_tab_row_new(GTK_LIST_BOX(widgets->AdditionsPackageBox),kernels[i],widgets); + gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); } + g_mutex_unlock(&main_config.mutex); + return NULL; } info_window *yon_info_window_new(){ @@ -106,7 +190,7 @@ int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets){ gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),0); - yon_interface_update(widgets); + yon_interface_update(widgets); return G_SOURCE_REMOVE; } @@ -125,6 +209,7 @@ void on_module_install_clicked(GtkWidget *,dictionary *dict){ kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); char *command = install_command(tab->module); yon_command_execute_async(command,widgets); + tab->module_installed=1; } @@ -133,6 +218,7 @@ void on_package_install_clicked(GtkWidget *,dictionary *dict){ kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); char *command = install_command(tab->package); yon_command_execute_async(command,widgets); + tab->package_installed=1; } @@ -141,6 +227,7 @@ void on_module_remove_clicked(GtkWidget *,dictionary *dict){ kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); char *command = remove_command(tab->module); yon_command_execute_async(command,widgets); + tab->module_installed=0; } @@ -149,108 +236,272 @@ void on_package_remove_clicked(GtkWidget *,dictionary *dict){ kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); char *command = remove_command(tab->package); yon_command_execute_async(command,widgets); + tab->package_installed=0; } -GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); - - kernels_tab *tab = malloc(sizeof(kernels_tab)); - tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); - tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); - tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); - tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); - tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); - tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); - tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); - tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); - tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); - tab->run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); - tab->tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); - tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); - tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); - tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); - tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); - tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); - tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton"); - - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"tab",tab); - g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); - g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); - g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); - g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); - g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab); - gtk_list_box_insert(target,tab->main_box,-1); +void on_launch_cliked(GtkWidget *,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + yon_config_set(KERNEL_BOOT_parameter,tab->package); + yon_interface_update(widgets); +} +kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ int size; config_str parsed = yon_char_parse(target_string,&size,";"); if (size){ - char *boot_run = config(KERNEL_BOOT_parameter); - if (!yon_char_is_empty(boot_run)&&!strcmp(parsed[1],boot_run)){ - yon_tag_add(GTK_BOX(tab->run_tags_box),BOOT_RUN_LABEL,"tag_orange",restart_icon_path); - } - tab->name = yon_char_new(parsed[0]); - tab->module = yon_char_new(parsed[1]); - tab->package = yon_char_new(parsed[2]); - char *name = yon_char_unite("",tab->name,"",NULL); - char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); - char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); int types_size; - config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); - for (int k=0;ktags_box),types_parsed[k],tag_type,NULL); - } - char *check_install_command = get_package_is_installed_command(tab->module); - if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); - - gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_widget_show(tab->remove_module_button); - gtk_widget_show(tab->remove_package_button); - gtk_widget_hide(tab->install_module_button); - gtk_widget_hide(tab->install_package_button); - } - { - free(check_install_command); - check_install_command = get_package_is_installed_command(tab->package); - if (!system(check_install_command)){ - yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); - gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); + dictionary *cur = yon_dictionary_get(&main_config.kernel_tabs,parsed[2]); + kernels_tab *tab = NULL; + if (cur){ + tab = (kernels_tab*)cur->data; + GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box)); + for (guint i=0;ichangelog_button); + gtk_widget_show(tab->launch_button); + if (tab->module_installed){ + gtk_widget_show(tab->remove_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_show(tab->remove_module_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + } else { + gtk_widget_hide(tab->remove_module_button); + gtk_widget_show(tab->install_module_button); + + } + if (tab->package_installed){ + gtk_widget_show(tab->remove_package_button); gtk_widget_hide(tab->install_package_button); + gtk_widget_show(tab->changelog_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + + } else { + gtk_widget_hide(tab->remove_package_button); + gtk_widget_show(tab->install_package_button); + + } + if (!tab->package_installed&&!tab->module_installed){ + gtk_widget_hide(tab->launch_button); + } + } else { + + tab = malloc(sizeof(kernels_tab)); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_table_row_path); + tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); + tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); + tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); + tab->run_tags_box = yon_gtk_builder_get_widget(builder,"RunBox"); + tab->tags_box = yon_gtk_builder_get_widget(builder,"TagsBox"); + tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); + tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); + tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); + tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); + tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton"); + tab->launch_button = yon_gtk_builder_get_widget(builder,"LaunchButton"); + + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"tab",tab); + g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab); + g_signal_connect(G_OBJECT(tab->launch_button),"clicked",G_CALLBACK(on_launch_cliked),dict); + tab->module_installed=-1; + tab->package_installed=-1; + tab->name = yon_char_new(parsed[0]); + tab->module = yon_char_new(parsed[1]); + tab->package = yon_char_new(parsed[2]); + char *name = yon_char_unite("",tab->name,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); + + yon_dictionary_add_or_create_if_exists_with_data(main_config.kernel_tabs,tab->package,tab); + + gtk_list_box_insert(target,tab->main_box,-1); + config_str types_parsed = yon_char_parse(parsed[5],&types_size,", "); + for (int k=0;ktags_box),types_parsed[k],tag_type,NULL); + } + char *check_install_command = get_package_is_installed_command(tab->module); + if (!system(check_install_command)){ + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + tab->module_installed=1; + + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_show(tab->remove_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_show(tab->changelog_button); + gtk_widget_show(tab->launch_button); + + } else tab->module_installed=0; + { + free(check_install_command); + check_install_command = get_package_is_installed_command(tab->package); + if (!system(check_install_command)){ + tab->package_installed=1; + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_hide(tab->install_package_button); + gtk_widget_show(tab->remove_package_button); + gtk_widget_show(tab->changelog_button); + gtk_widget_show(tab->launch_button); + } + } + yon_char_parsed_free(types_parsed,types_size); + gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_markup(GTK_LABEL(tab->module_label),module); + gtk_label_set_markup(GTK_LABEL(tab->package_label),package); + gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[6]); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tab->tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),tab->run_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label); + } + + + + return tab; + } + return NULL; +} + +additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ + int size; + config_str parsed = yon_char_parse(target_string,&size,";"); + if (size){ + dictionary *cur = yon_dictionary_get(&main_config.addition_tabs,parsed[2]); + additions_kernels_tab *tab = NULL; + if (cur){ + tab = (additions_kernels_tab*)cur->data; + GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box)); + for (guint i=0;imodule_installed){ + gtk_widget_show(tab->remove_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_show(tab->remove_module_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + } else { + gtk_widget_hide(tab->remove_module_button); + gtk_widget_show(tab->install_module_button); + + } + if (tab->package_installed){ gtk_widget_show(tab->remove_package_button); + gtk_widget_hide(tab->install_package_button); + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + + } else { + gtk_widget_hide(tab->remove_package_button); + gtk_widget_show(tab->install_package_button); + + } + } else { + GtkBuilder *builder = gtk_builder_new_from_resource(glade_additions_table_row_path); + + tab = malloc(sizeof(additions_kernels_tab)); + tab->main_box = yon_gtk_builder_get_widget(builder,"TableRowLabel"); + tab->name_label = yon_gtk_builder_get_widget(builder,"NameLabel"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->module_icon = yon_gtk_builder_get_widget(builder,"ModuleIcon"); + tab->package_icon = yon_gtk_builder_get_widget(builder,"PackageIcon"); + tab->module_label = yon_gtk_builder_get_widget(builder,"ModuleLabel"); + tab->package_label = yon_gtk_builder_get_widget(builder,"PackageLabel"); + tab->install_tags_box = yon_gtk_builder_get_widget(builder,"InstallTagsBox"); + tab->description_label = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + tab->remove_module_button = yon_gtk_builder_get_widget(builder,"RemoveModuleButton"); + tab->remove_package_button = yon_gtk_builder_get_widget(builder,"RemovePackageButton"); + tab->install_module_button = yon_gtk_builder_get_widget(builder,"InstallModuleButton"); + tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); + + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"tab",tab); + g_signal_connect(G_OBJECT(tab->install_module_button),"clicked",G_CALLBACK(on_module_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); + gtk_list_box_insert(target,tab->main_box,-1); + + int size; + config_str parsed = yon_char_parse(target_string,&size,";"); + if (size){ + tab->name = yon_char_new(parsed[0]); + tab->module = yon_char_new(parsed[1]); + tab->package = yon_char_new(parsed[2]); + char *name = yon_char_unite("",tab->name,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); + char *check_install_command = get_package_is_installed_command(tab->module); + + yon_dictionary_add_or_create_if_exists_with_data(main_config.addition_tabs,tab->package,tab); + + if (!system(check_install_command)){ + yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_show(tab->remove_module_button); + gtk_widget_show(tab->remove_package_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_hide(tab->install_package_button); + } + { + free(check_install_command); + check_install_command = get_package_is_installed_command(tab->package); + if (!system(check_install_command)){ + yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_widget_hide(tab->install_package_button); + gtk_widget_show(tab->remove_package_button); + } + } + gtk_label_set_markup(GTK_LABEL(tab->name_label),name); + gtk_label_set_markup(GTK_LABEL(tab->module_label),module); + gtk_label_set_markup(GTK_LABEL(tab->package_label),package); + gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[3]); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); + gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label); } } - yon_char_parsed_free(types_parsed,types_size); - gtk_label_set_markup(GTK_LABEL(tab->name_label),name); - gtk_label_set_markup(GTK_LABEL(tab->module_label),module); - gtk_label_set_markup(GTK_LABEL(tab->package_label),package); - gtk_label_set_text(GTK_LABEL(tab->description_label),parsed[6]); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->KernelSizeGroup),gtk_widget_get_parent(gtk_widget_get_parent(tab->name_label))); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->TagsSizeGroup),tab->tags_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->InstallSizeGroup),tab->install_tags_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->RunSizeGroup),tab->run_tags_box); - gtk_size_group_add_widget(GTK_SIZE_GROUP(widgets->DescriptionSizeGroup),tab->description_label); + return tab; } - return tab->main_box; + return NULL; } // standard functions @@ -272,10 +523,18 @@ void config_init(){ main_config.lock_save_global=0; main_config.lock_save_local=0; main_config.load_mode=1; + main_config.save_config=1; + main_config.kernel_tabs=NULL; + main_config.addition_tabs=NULL; } void on_update_clicked(GtkWidget *, main_window *widgets){ - yon_interface_update(widgets); + yon_dictionary_free_all(main_config.kernel_tabs,free); + yon_dictionary_free_all(main_config.addition_tabs,free); + main_config.kernel_tabs=NULL; + main_config.addition_tabs=NULL; + + yon_interface_update(widgets); } void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){ @@ -434,6 +693,14 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->AdditionsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); + g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),widgets); + g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); + GdkRGBA rgba; vte_terminal_get_color_background_for_draw(VTE_TERMINAL(widgets->InstallTerminal),&rgba); vte_terminal_set_color_cursor(VTE_TERMINAL(widgets->InstallTerminal),&rgba); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 65b33e0..2cd641d 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -25,6 +25,7 @@ #define glade_info_path "/com/ublinux/ui/ubl-settings-kernel-info.glade" #define glade_install_path "/com/ublinux/ui/ubl-settings-kernel-install.glade" #define glade_table_row_path "/com/ublinux/ui/ubl-settings-kernel-table-row.glade" +#define glade_additions_table_row_path "/com/ublinux/ui/ubl-settings-kernel-additions-table-row.glade" #define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-kernel.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) @@ -67,7 +68,10 @@ char *local; typedef struct { template_config_fields - + GMutex mutex; + int save_config; + dictionary *kernel_tabs; + dictionary *addition_tabs; } config; typedef struct { @@ -125,6 +129,11 @@ typedef struct { }install_window; typedef struct { + char *module; + char *package; + char *name; + int module_installed; + int package_installed; GtkWidget *main_box; GtkWidget *name_label; GtkWidget *module_label; @@ -140,16 +149,45 @@ typedef struct { GtkWidget *install_module_button; GtkWidget *install_package_button; GtkWidget *changelog_button; + GtkWidget *launch_button; + +} kernels_tab; + +typedef struct { char *module; char *package; char *name; + int module_installed; + int package_installed; + GtkWidget *main_box; + GtkWidget *name_label; + GtkWidget *module_label; + GtkWidget *package_label; + GtkWidget *module_icon; + GtkWidget *package_icon; + GtkWidget *install_tags_box; + GtkWidget *description_label; + GtkWidget *remove_module_button; + GtkWidget *remove_package_button; + GtkWidget *install_module_button; + GtkWidget *install_package_button; -} kernels_tab; +} additions_kernels_tab; -void yon_interface_update(main_window *widgets); +void *yon_interface_update(main_window *widgets); + + +void on_config_save(GtkWidget *self, main_window *widgets); +void on_config_global_save(GtkWidget *self, main_window *widgets); +void on_config_local_save(GtkWidget *self, main_window *widgets); +void on_config_custom_save(GtkWidget *self, main_window *widgets); void yon_load_proceed(YON_CONFIG_TYPE type); +void on_config_local_load(GtkWidget *, main_window *widgets); +void on_config_global_load(GtkWidget *, main_window *widgets); +void on_config_custom_load(GtkWidget *,main_window *widgets); + void config_init(); void yon_main_window_complete(main_window *widgets); @@ -161,10 +199,12 @@ void on_module_install_clicked(GtkWidget *,dictionary *dict); void on_package_install_clicked(GtkWidget *,dictionary *dict); void on_module_remove_clicked(GtkWidget *,dictionary *dict); void on_package_remove_clicked(GtkWidget *,dictionary *dict); +void on_launch_cliked(GtkWidget *,dictionary *dict); void on_build_execute(GtkWidget *, dictionary *dict); int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name); -GtkWidget *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); +kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); +additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets); void on_update_clicked(GtkWidget *, main_window *widgets); diff --git a/ubl-settings-kernel-additions-table-row.glade b/ubl-settings-kernel-additions-table-row.glade new file mode 100644 index 0000000..ac366be --- /dev/null +++ b/ubl-settings-kernel-additions-table-row.glade @@ -0,0 +1,245 @@ + + + + + + + True + False + 15 + + + True + False + center + vertical + 1 + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Name + True + False + 0 + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Module + 0 + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + 5 + + + True + False + + + False + True + 0 + + + + + True + False + Package + 0 + + + True + True + 1 + + + + + False + True + 2 + + + + + False + True + 1 + + + + + True + False + vertical + + + + + + False + True + 3 + + + + + True + False + center + 5 + vertical + 5 + + + Install module + True + True + True + + + + False + True + 0 + + + + + Remove module + True + True + + + + False + True + 1 + + + + + Install package + True + True + True + + + + False + True + 2 + + + + + Remove package + True + True + + + + False + True + 3 + + + + + False + True + end + 4 + + + + + True + False + True + 0 + + + True + True + end + 6 + + + + + diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index bfc8643..28bbd33 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -1,5 +1,5 @@ - + @@ -200,9 +200,8 @@ - - Install package - True + + Remove module True True + + + False + True + 5 + + False -- 2.35.1 From c5be4e7dd8033868f67e0f011065ca56043befe1 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 7 Nov 2024 18:16:12 +0600 Subject: [PATCH 09/37] Fixes, localisation --- gresource.xml | 1 + kernel-list-addon.csv | 2 +- source/CMakeLists.txt | 1 + source/ubl-settings-kernel.c | 188 ++++++++++++++++++++++---- source/ubl-settings-kernel.h | 22 +++ source/ubl-strings.h | 44 +++++- ubl-settings-kernel-dialog.glade | 214 ++++++++++++++++++++++++++++++ ubl-settings-kernel-info.glade | 2 +- ubl-settings-kernel-install.glade | 4 +- ubl-settings-kernel.desktop | 8 +- ubl-settings-kernel.glade | 3 +- ubl-settings-kernel.pot | 150 ++++++++------------- ubl-settings-kernel_ru.po | 208 ++++++++++++----------------- 13 files changed, 593 insertions(+), 254 deletions(-) create mode 100644 ubl-settings-kernel-dialog.glade diff --git a/gresource.xml b/gresource.xml index 3449e5e..05fab96 100644 --- a/gresource.xml +++ b/gresource.xml @@ -6,6 +6,7 @@ ubl-settings-kernel-install.glade ubl-settings-kernel-table-row.glade ubl-settings-kernel-additions-table-row.glade + ubl-settings-kernel-dialog.glade ubl-settings-kernel.css diff --git a/kernel-list-addon.csv b/kernel-list-addon.csv index a4b3bf7..679fb38 100644 --- a/kernel-list-addon.csv +++ b/kernel-list-addon.csv @@ -1,5 +1,5 @@ NAME;PAСKAGE_UBM;PAСKAGE;DESCRIPTION -Linux 5.15 headers;ubm-002-linux515-headers;linux515-headers;The Linux kernel headers v5.15 +Linux 5.15 headers;ubm-001-linux515-headers;linux515-headers;The Linux kernel headers v5.15 Linux 5.15 Docs;ubm-003-linux515-docs;linux515-docs;The Linux kernel docs v5.15 Linux 5.15 DKMS modules;ubm-linux515-dkms;linux515-dkms;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu Linux 6.1 headers;ubm-002-linux61-headers;linux61-headers;The Linux kernel headers v6.1 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 450e841..e90e6e4 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -36,6 +36,7 @@ set(DEPENDFILES ../ubl-settings-kernel-install.glade ../ubl-settings-kernel-table-row.glade ../ubl-settings-kernel-additions-table-row.glade + ../ubl-settings-kernel-dialog.glade ../gresource.xml ../kernel-list.csv ../kernel-list-addon.csv diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index b8b0071..fb69000 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -193,58 +193,180 @@ gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets){ yon_interface_update(widgets); return G_SOURCE_REMOVE; } +gboolean yon_terminal_get_progress(main_window *widgets){ + char *text = vte_terminal_get_text_format(VTE_TERMINAL(widgets->InstallTerminal),VTE_FORMAT_TEXT); + GRegex *regex = g_regex_new("\\d?\\d\\d%",0,0,NULL); + + GMatchInfo *match = NULL; + g_regex_match(regex,text,0,&match); + g_regex_unref(regex); + char *target = g_match_info_fetch(match,0); + g_match_info_unref(match); + + if (!yon_char_is_empty(target)) { + target[strlen(target)-1]='\0'; + double percentage = atof(target); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),percentage/100); + } + + if (!gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->MainRevealer))){ + return G_SOURCE_REMOVE; + } + return G_SOURCE_CONTINUE; +} void *yon_command_execute_async(char *command,main_window *widgets){ + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),0); + vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->MainRevealer),1); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); yon_terminal_integrated_start(widgets->InstallTerminal,command); - glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); - vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); + vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + gdk_threads_add_timeout(500,(GSourceFunc)yon_terminal_get_progress,widgets); return NULL; } -void on_module_install_clicked(GtkWidget *,dictionary *dict){ +void on_install_accept(GtkWidget *, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - char *command = install_command(tab->module); - yon_command_execute_async(command,widgets); - tab->module_installed=1; + dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); + char *modules_to_install = tab->module; + + GtkTreeIter iter; + for_iter (GTK_TREE_MODEL(window->liststore1),&iter){ + int status; + char *package; + gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); + if (status){ + char *temp = yon_char_unite(modules_to_install," ", package, NULL); + if (strcmp(modules_to_install,tab->module)) free(modules_to_install); + modules_to_install = temp; + } + } + char *command = install_command(modules_to_install); + yon_command_execute_async(command,widgets); + tab->module_installed=1; + free(dict->first->next->next); + dict->first->next->next=NULL; +} +dialog_window *yon_dialog_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_dialog_path); + dialog_window *window = malloc(sizeof(dialog_window)); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->TopicLabel = yon_gtk_builder_get_widget(builder,"TopicLabel"); + window->DependencesTree = yon_gtk_builder_get_widget(builder,"DependencesTree"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->ChooseCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChooseCell")); + window->liststore1 = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + yon_cell_renderer_toggle_set_toggle(GTK_CELL_RENDERER_TOGGLE(window->ChooseCell),window->DependencesTree); + return window; +} + +void on_module_install_clicked(GtkWidget *,dictionary *dict){ + // main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + char *action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + dialog_window *window = yon_dialog_window_new(); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_install_accept),dict); + + gtk_label_set_text(GTK_LABEL(window->TopicLabel),action_text); + gtk_widget_show(window->Window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + + int size; + config_str additions = yon_resource_open_file(kernels_addon_path,&size); + GtkTreeIter iter; + for (int i=0;imodule_requirements_size;i++){ + gtk_list_store_append(window->liststore1,&iter); + for (int j=1;jmodule_requirements[i])) + gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + yon_char_parsed_free(parsed,cur_size); + } + gtk_list_store_set(window->liststore1,&iter,0,1,1,tab->module_requirements[i],-1); + } + yon_char_parsed_free(additions,size); } void on_package_install_clicked(GtkWidget *,dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + // main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - char *command = install_command(tab->package); - yon_command_execute_async(command,widgets); - tab->package_installed=1; + char *action_text = PACKAGE_INSTALL_CONFIRMATION_LABEL(tab->name); + dialog_window *window = yon_dialog_window_new(); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_install_accept),dict); + + gtk_label_set_text(GTK_LABEL(window->TopicLabel),action_text); + gtk_widget_show(window->Window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + + int size; + config_str additions = yon_resource_open_file(kernels_addon_path,&size); + GtkTreeIter iter; + for (int i=0;ipackage_requirements_size;i++){ + gtk_list_store_append(window->liststore1,&iter); + for (int j=1;jpackage_requirements[i])) + gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + yon_char_parsed_free(parsed,cur_size); + } + gtk_list_store_set(window->liststore1,&iter,0,1,1,tab->package_requirements[i],-1); + } + yon_char_parsed_free(additions,size); } -void on_module_remove_clicked(GtkWidget *,dictionary *dict){ +void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - char *command = remove_command(tab->module); - yon_command_execute_async(command,widgets); - tab->module_installed=0; + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + char *command = remove_command(tab->module); + yon_command_execute_async(command,widgets); + tab->module_installed=0; + } } -void on_package_remove_clicked(GtkWidget *,dictionary *dict){ +void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - char *command = remove_command(tab->package); - yon_command_execute_async(command,widgets); - tab->package_installed=0; + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + int resp = yon_confirmation_dialog_call(self,data); + if (resp == GTK_RESPONSE_ACCEPT){ + char *command = remove_command(tab->package); + yon_command_execute_async(command,widgets); + tab->package_installed=0; + } } -void on_launch_cliked(GtkWidget *,dictionary *dict){ +void on_launch_cliked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - yon_config_set(KERNEL_BOOT_parameter,tab->package); - yon_interface_update(widgets); + dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); + data->action_text = LAUNCH_CONFIRMATION_LABEL(tab->name); + data->function = NULL; + data->data = NULL; + if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ + yon_config_set(KERNEL_BOOT_parameter,tab->package); + yon_interface_update(widgets); + } } kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_window *widgets){ @@ -263,11 +385,14 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo g_list_free(list); gtk_widget_hide(tab->changelog_button); gtk_widget_show(tab->launch_button); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),"",GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),"",GTK_ICON_SIZE_BUTTON); if (tab->module_installed){ gtk_widget_show(tab->remove_module_button); gtk_widget_hide(tab->install_module_button); gtk_widget_show(tab->remove_module_button); yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); } else { gtk_widget_hide(tab->remove_module_button); gtk_widget_show(tab->install_module_button); @@ -278,6 +403,7 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo gtk_widget_hide(tab->install_package_button); gtk_widget_show(tab->changelog_button); yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); } else { gtk_widget_hide(tab->remove_package_button); @@ -337,22 +463,24 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo char *passw = types_parsed[k][0]==' '?yon_char_divide(types_parsed[k],0):NULL; if (passw) free(passw); char *tag_type = NULL; - if (!strcmp(types_parsed[k],"LTS")){ + if (!strcmp(types_parsed[k],LTS_TAG)){ tag_type = "tag_blue"; - } else if (!strcmp(types_parsed[k],"Stable")){ + } else if (!strcmp(types_parsed[k],STABLE_TAG)){ tag_type = "tag_green"; - } else if (!strcmp(types_parsed[k],"RealTime")){ + } else if (!strcmp(types_parsed[k],REALTIME_TAG)){ tag_type = "tag_orange"; - } else if (!strcmp(types_parsed[k],"Hardened")){ + } else if (!strcmp(types_parsed[k],HARDENED_TAG)){ tag_type = "tag_yellow"; - } else if (!strcmp(types_parsed[k],"Recomended")){ + } else if (!strcmp(types_parsed[k],RECOMENDED_TAG)){ tag_type = "tag_blue"; - } else if (!strcmp(types_parsed[k],"Reactive")){ + } else if (!strcmp(types_parsed[k],REACTIVE_TAG)){ tag_type = "tag_purple"; } else continue; yon_tag_add(GTK_BOX(tab->tags_box),types_parsed[k],tag_type,NULL); } + tab->module_requirements = yon_char_parse(parsed[3],&tab->module_requirements_size,","); + tab->package_requirements = yon_char_parse(parsed[4],&tab->package_requirements_size,","); char *check_install_command = get_package_is_installed_command(tab->module); if (!system(check_install_command)){ yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); @@ -409,12 +537,15 @@ additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *targe for (guint i=0;imodule_icon),"",GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),"",GTK_ICON_SIZE_BUTTON); g_list_free(list); if (tab->module_installed){ gtk_widget_show(tab->remove_module_button); gtk_widget_hide(tab->install_module_button); gtk_widget_show(tab->remove_module_button); yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); } else { gtk_widget_hide(tab->remove_module_button); gtk_widget_show(tab->install_module_button); @@ -424,6 +555,7 @@ additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *targe gtk_widget_show(tab->remove_package_button); gtk_widget_hide(tab->install_package_button); yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); + gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); } else { gtk_widget_hide(tab->remove_package_button); @@ -472,6 +604,7 @@ additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *targe yon_dictionary_add_or_create_if_exists_with_data(main_config.addition_tabs,tab->package,tab); if (!system(check_install_command)){ + tab->module_installed=1; yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); @@ -484,6 +617,7 @@ additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *targe free(check_install_command); check_install_command = get_package_is_installed_command(tab->package); if (!system(check_install_command)){ + tab->package_installed=1; yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); gtk_widget_hide(tab->install_package_button); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 2cd641d..5fcadda 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -26,6 +26,7 @@ #define glade_install_path "/com/ublinux/ui/ubl-settings-kernel-install.glade" #define glade_table_row_path "/com/ublinux/ui/ubl-settings-kernel-table-row.glade" #define glade_additions_table_row_path "/com/ublinux/ui/ubl-settings-kernel-additions-table-row.glade" +#define glade_dialog_path "/com/ublinux/ui/ubl-settings-kernel-dialog.glade" #define banner_path "/com/ublinux/images/ubl-settings-kernel-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-kernel.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) @@ -150,6 +151,10 @@ typedef struct { GtkWidget *install_package_button; GtkWidget *changelog_button; GtkWidget *launch_button; + config_str module_requirements; + int module_requirements_size; + config_str package_requirements; + int package_requirements_size; } kernels_tab; @@ -174,6 +179,18 @@ typedef struct { } additions_kernels_tab; +typedef struct { + GtkWidget *Window; + GtkWidget *HeadLabel; + GtkWidget *TopicLabel; + GtkWidget *DependencesTree; + GtkWidget *CancelButton; + GtkWidget *AcceptButton; + GtkCellRenderer *ChooseCell; + GtkListStore *liststore1; + +} dialog_window; + void *yon_interface_update(main_window *widgets); @@ -193,8 +210,13 @@ void config_init(); void yon_main_window_complete(main_window *widgets); gboolean on_command_execute_success(GtkWidget *,gint,main_window *widgets); +gboolean yon_terminal_get_progress(main_window *widgets); void *yon_command_execute_async(char *command,main_window *widgets); +dialog_window *yon_dialog_window_new(); + +void on_install_accept(GtkWidget *, dictionary *dict); + void on_module_install_clicked(GtkWidget *,dictionary *dict); void on_package_install_clicked(GtkWidget *,dictionary *dict); void on_module_remove_clicked(GtkWidget *,dictionary *dict); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 9e5d9b7..78ef180 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -1,15 +1,53 @@ -#define TITLE_LABEL _("ubl-settings-kernel") -#define TITLE_INFO_LABEL _("kernel configuration") +#define TITLE_LABEL _("System kernel") +#define TITLE_INFO_LABEL _("Kernel downloading and installation, kernel selection to boot by default") #define INFO_TITLE_LABEL _("Information") #define MODULE_LABEL _("Module:") #define PACKAGE_LABEL _("Package:") +#define CANCEL_LABEL _("Cancel") + #define PACKAGE_NOT_FOUND_LABEL _("Package were not found") #define CHANGELOG_NOT_FOUND_LABEL _("Changelog was not found") #define PACKAGE_INSTALLED_LABEL _("Package installed") #define MODULE_INSTALLED_LABEL _("Module installed") -#define BOOT_RUN_LABEL _("Startup boot") \ No newline at end of file +#define BOOT_RUN_LABEL _("Startup boot") + + +#define INITRAMFS_TITLE_LABEL _("Initramfs building") +#define EXECUTE_LABEL _("Execute") +#define KERNEL_VERSION_LABEL _("Kernel version:") +#define ADD_DEBUG_LABEL _("Add debug components") +#define ADD_DRIVERS_LABEL _("Add drivers for current hardware components only") + +#define INSTALL_MODULE_LABEL _("Install module") +#define REMOVE_MODULE_LABEL _("Remove module") +#define INSTALL_PACKAGE_LABEL _("Install package") +#define REMOVE_PACKAGE_LABEL _("Remove package") +#define CHANGELOG_LABEL _("Changelog") +#define LAUNCH_LABEL _("Launch") +#define LTS_TAG _("LTS") +#define REACTIVE_TAG _("Reactive") +#define RECOMENDED_TAG _("Recomended") +#define HARDENED_TAG _("Hardened") +#define REALTIME_TAG _("RealTime") +#define STABLE_TAG _("Stable") + +#define KERNELS_LABEL _("Kernels") +#define ADDITIONS_LABEL _("Additions") +#define UPDATE_LABEL _("Update") +#define OPE_INFO_LABEL _("Open package information") +#define MORE_LABEL _("More") + +#define ACCEPT_LABEL _("Accept") +#define WARNING_TITLE_LABEL _("Warning") +#define DEPENDENCES_LABEL _("Dependences") + +#define MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel "),target,"?",NULL) +#define PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install package "),target,"?",NULL) +#define MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove module "),target,"?",NULL) +#define PACKAGE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove package "),target,"?",NULL) +#define LAUNCH_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to launch "),target,"?",NULL) \ No newline at end of file diff --git a/ubl-settings-kernel-dialog.glade b/ubl-settings-kernel-dialog.glade new file mode 100644 index 0000000..34d0add --- /dev/null +++ b/ubl-settings-kernel-dialog.glade @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + 400 + 200 + False + True + com.ublinux.ubl-settings-repomanager + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + vertical + + + True + False + 15 + + + True + False + 51 + dialog-question-symbolic + + + False + True + 0 + + + + + True + False + label + 0 + + + False + True + 1 + + + + + False + True + 0 + + + + + False + True + 0 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + True + never + in + + + True + True + liststore1 + + + none + + + + + + + + 0 + + + + + + + Module + + + + 1 + + + + + + + Description + + + + 2 + + + + + + + + + + + + + True + False + Dependences + + + + + True + True + 1 + + + + + + + True + False + True + + + True + False + Warning + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-kernel + + + + + Cancel + True + True + True + + + 1 + + + + + Accept + True + True + True + + + end + 2 + + + + + + diff --git a/ubl-settings-kernel-info.glade b/ubl-settings-kernel-info.glade index 02b9d6b..143b6be 100644 --- a/ubl-settings-kernel-info.glade +++ b/ubl-settings-kernel-info.glade @@ -61,7 +61,7 @@ True False - Kernel settings + Information diff --git a/ubl-settings-kernel-install.glade b/ubl-settings-kernel-install.glade index ff1f9d4..d88d358 100644 --- a/ubl-settings-kernel-install.glade +++ b/ubl-settings-kernel-install.glade @@ -1,5 +1,5 @@ - + @@ -132,7 +132,7 @@ True False - Kernel settings + Initramfs building diff --git a/ubl-settings-kernel.desktop b/ubl-settings-kernel.desktop index 2624408..f9a5465 100644 --- a/ubl-settings-kernel.desktop +++ b/ubl-settings-kernel.desktop @@ -1,11 +1,11 @@ [Desktop Entry] Encoding=UTF-8 Name=System kernel -Name[ru]=kernel +Name[ru]=Ядро системы GenericName=ubl-settings-kernel -GenericName[ru]=kernel -Comment=Kernel downloading and installation for default load -Comment[ru]=Приложение для kernel +GenericName[ru]=Ядро системы +Comment=Kernel downloading and installation, kernel selection to boot by default +Comment[ru]=Загрузка и устанвока ядер системы, выбор ядра для загрузки по умолчанию Type=Application Exec=pkexec ubl-settings-kernel Icon=com.ublinux.ubl-settings-kernel diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 02b42e0..1622efa 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -1,5 +1,5 @@ - + @@ -214,6 +214,7 @@ True True True + Update image1 + + True + False + 5 + + + True + True + image1 + + + + False + True + 0 + + + + + Remove module + True + True + + + + True + True + 2 + + False @@ -207,13 +246,42 @@ - - Remove package - True - True - + + True + False + 5 + + + True + True + image2 + + + + False + True + 0 + + + + + Remove package + True + True + + + + True + True + 2 + + False diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index c745b22..29369e1 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -3,6 +3,16 @@ + + True + False + com.ublinux.libublsettingsui-gtk.update-cloud-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk.update-cloud-symbolic + True False @@ -212,13 +222,42 @@ - - Remove module - True - True - + + True + False + 5 + + + True + True + image1 + + + + False + True + 0 + + + + + Remove module + True + True + + + + True + True + 2 + + False @@ -243,13 +282,42 @@ - - Remove package - True - True - + + True + False + 5 + + + True + True + image2 + + + + False + True + 0 + + + + + Remove package + True + True + + + + True + True + 2 + + False diff --git a/ubl-settings-kernel.css b/ubl-settings-kernel.css index 225534a..5e3a34f 100644 --- a/ubl-settings-kernel.css +++ b/ubl-settings-kernel.css @@ -139,7 +139,14 @@ background:transparent; } .listfix row:selected * .buttonlistfx:active * { + background-color: @theme_selected_fg_color; color: @theme_fg_color; + transition:100ms; +} +.listfix row:selected * .buttonlistfx:active { + background-color: @theme_selected_fg_color; + color: @theme_fg_color; + transition:100ms; } @@ -205,4 +212,31 @@ background:transparent; color:#2f2f2f; background-color:#999999 +} +.updatebutton { + background-color: #ef7a7a; + color: @theme_bg_color; + border-color: #aa5555; +} +.updatebutton *{ + background-color: #ef7a7a; + color: @theme_bg_color; +} +.updatebutton:active { + background-color: @theme_selected_bg_color; + color: @theme_bg_color; + border-color: @theme_selected_bg_color; +} +.updatebutton:active *{ + background-color: @theme_selected_bg_color; + color: @theme_bg_color; +} +.updatebutton:disabled { + background-color: #ffcfcf; + border-color: @insensitive_fg_color; + border-width:0.5px; +} +.updatebutton *:disabled { + background-color: #ffcfcf; + color: @insensitive_fg_color; } \ No newline at end of file diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 3d4b658..1df447e 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -347,6 +347,9 @@ True False + -- 2.35.1 From 9b63bab785af11527b9641b7f3003670f34e8802 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 18 Nov 2024 18:09:12 +0600 Subject: [PATCH 34/37] Added new status message --- source/ubl-settings-kernel.c | 12 +++++++++++- source/ubl-settings-kernel.h | 1 + source/ubl-strings.h | 1 + ubl-settings-kernel-additions-table-row.glade | 1 - ubl-settings-kernel-table-row.glade | 1 - ubl-settings-kernel.pot | 4 ++++ ubl-settings-kernel_ru.po | 4 ++++ 7 files changed, 21 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 18865c5..e8083f7 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -200,7 +200,7 @@ void *yon_tab_set_installed(kernels_tab *tab){ } void *yon_interface_update(main_window *widgets){ - gdk_threads_add_idle((GSourceFunc)yon_clear_interface,widgets); + yon_clear_interface(widgets); int kernels_size; config_str kernels = yon_resource_open_file(kernels_path, &kernels_size); @@ -328,6 +328,7 @@ gboolean yon_terminal_get_progress(main_window *widgets){ for (i=0;target[i];i++){ target[i][strlen(target[i])-1]='\0'; percentage = atof(target[i]); + yon_debug_output("%s\n",target[i]); } gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),percentage/i/100); } @@ -508,6 +509,14 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ } } +void on_module_remove_done(GtkWidget *self, int state, kernels_tab *tab){ + char *command = get_package_is_installed_command(tab->module); + if (!state&&!system(command)){ + yon_ubl_status_box_render(PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL,BACKGROUND_IMAGE_INFO_TYPE); + } + g_signal_handlers_disconnect_by_func(G_OBJECT(self),on_module_remove_done,tab); +} + void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); @@ -517,6 +526,7 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ char *command = remove_command(tab->module); + g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_module_remove_done),tab); yon_command_execute_async(command,widgets); tab->module_installed=0; } diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 0f383d2..9eab431 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -241,6 +241,7 @@ dialog_window *yon_dialog_window_new(); void on_module_install_accept(GtkWidget *, dictionary *dict); void on_package_install_accept(GtkWidget *, dictionary *dict); +void on_module_remove_done(GtkWidget *self, int state, kernels_tab *tab); void on_module_install_clicked(GtkWidget *,dictionary *dict); void on_package_install_clicked(GtkWidget *,dictionary *dict); void on_module_remove_clicked(GtkWidget *,dictionary *dict); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 618fa80..4f48900 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -56,6 +56,7 @@ #define OPERATION_SUCCESS_LABEL _("Terminal operation success") #define OPERATION_ERROR_LABEL _("Terminal operation failed") #define OPERATION_IN_PROGRESS_LABEL _("Terminal operation in process") +#define PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL _("The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed.") #define MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel")," ",target,"?",NULL) #define PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install package")," ",target,"?",NULL) diff --git a/ubl-settings-kernel-additions-table-row.glade b/ubl-settings-kernel-additions-table-row.glade index 66e758e..40c673c 100644 --- a/ubl-settings-kernel-additions-table-row.glade +++ b/ubl-settings-kernel-additions-table-row.glade @@ -14,7 +14,6 @@ com.ublinux.libublsettingsui-gtk.update-cloud-symbolic - True False 5 5 diff --git a/ubl-settings-kernel-table-row.glade b/ubl-settings-kernel-table-row.glade index 29369e1..96ae99f 100644 --- a/ubl-settings-kernel-table-row.glade +++ b/ubl-settings-kernel-table-row.glade @@ -14,7 +14,6 @@ com.ublinux.libublsettingsui-gtk.update-cloud-symbolic - True False 5 5 diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot index 2dd1815..b2621d6 100644 --- a/ubl-settings-kernel.pot +++ b/ubl-settings-kernel.pot @@ -198,6 +198,10 @@ msgstr "" msgid "Terminal operation in process" msgstr "" +#: source/ubl-strings.h:58 +msgid "The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed." +msgstr "" + #: source/ubl-strings.h:60 msgid "Are you sure want to install kernel" msgstr "" diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po index 7ebd11d..5a3311e 100644 --- a/ubl-settings-kernel_ru.po +++ b/ubl-settings-kernel_ru.po @@ -199,6 +199,10 @@ msgstr "Операция терминала завершена с ошибкой msgid "Terminal operation in process" msgstr "Операция терминала в процессе выполнения" +#: source/ubl-strings.h:58 +msgid "The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed." +msgstr "Пакет с модулем удалён, но модуль не отключен от системы, так как используется другими системными программами. После перезагрузки модуль будет отключен и удалён." + #: source/ubl-strings.h:60 msgid "Are you sure want to install kernel" msgstr "Вы хотите установить в систему ядро" -- 2.35.1 From ea6080ef976c9e21ed1bad0c7a8281dfeb849614 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 19 Nov 2024 09:51:05 +0600 Subject: [PATCH 35/37] Progress bar progress getting edit --- source/ubl-settings-kernel.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index e8083f7..36168d3 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -325,12 +325,11 @@ gboolean yon_terminal_get_progress(main_window *widgets){ if (target){ int i; - for (i=0;target[i];i++){ + for (i=0;target[i+1];i++){}; target[i][strlen(target[i])-1]='\0'; percentage = atof(target[i]); yon_debug_output("%s\n",target[i]); - } - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),percentage/i/100); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),percentage/100); } g_match_info_unref(match); -- 2.35.1 From 4716df026a06950b098ed649ed25836650432f90 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 19 Nov 2024 16:10:48 +0600 Subject: [PATCH 36/37] Added ability to install and uninstall multiple packages from one list element --- kernel-list-addon.csv | 6 +- source/ubl-settings-kernel.c | 108 ++++++---- source/ubl-settings-kernel.h | 4 +- ubl-settings-kernel-additions-table-row.glade | 4 +- ubl-settings-kernel.css | 57 ++--- ubl-settings-kernel.glade | 199 +++++++++--------- ubl-settings-kernel_ru.po | 2 +- 7 files changed, 204 insertions(+), 176 deletions(-) diff --git a/kernel-list-addon.csv b/kernel-list-addon.csv index a4b3bf7..7337cdf 100644 --- a/kernel-list-addon.csv +++ b/kernel-list-addon.csv @@ -1,10 +1,10 @@ NAME;PAСKAGE_UBM;PAСKAGE;DESCRIPTION Linux 5.15 headers;ubm-002-linux515-headers;linux515-headers;The Linux kernel headers v5.15 Linux 5.15 Docs;ubm-003-linux515-docs;linux515-docs;The Linux kernel docs v5.15 -Linux 5.15 DKMS modules;ubm-linux515-dkms;linux515-dkms;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +Linux 5.15 DKMS modules;ubm-linux515-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu Linux 6.1 headers;ubm-002-linux61-headers;linux61-headers;The Linux kernel headers v6.1 Linux 6.1 Docs;ubm-003-linux61-docs;linux61-docs;The Linux kernel docs v6.1 -Linux 6.1 DKMS modules;ubm-linux61-dkms;linux61-dkms;The Linux kernel DKMS modules v6.1 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +Linux 6.1 DKMS modules;ubm-linux61-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v6.1 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu Linux 6.6 headers;ubm-002-linux66-headers;linux66-headers;The Linux kernel headers v6.6 Linux 6.6 Docs;ubm-003-linux66-docs;linux66-docs;The Linux kernel docs v6.6 -Linux 6.6 DKMS modules;ubm-linux66-dkms;linux66-dkms;The Linux kernel DKMS modules v6.6 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu \ No newline at end of file +Linux 6.6 DKMS modules;ubm-linux66-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v6.6 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu \ No newline at end of file diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 36168d3..ab9f8f6 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -118,24 +118,6 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_interface_update(widgets); } -gboolean yon_clear_interface(main_window *widgets){ - if (!main_config.kernel_tabs){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); - for (guint i=0;iAdditionsPackageBox)); - for (guint i=0;iinstall_tags_box)); for (guint i=0;imodule); - if (!system(check_install_command)){ + char *target_module = yon_package_string_set(tab->module); + char *target_package = yon_package_string_set(tab->package); + + char *check_install_command = get_package_is_installed_command(target_module); + if (!system(yon_debug_output("%s\n",check_install_command))){ tab->module_installed=1; } else tab->module_installed=0; free(check_install_command); - check_install_command = get_package_is_installed_command(tab->package); - if (!system(check_install_command)){ + check_install_command = get_package_is_installed_command(target_package); + if (!system(yon_debug_output("%s\n",check_install_command))){ tab->package_installed=1; } else tab->package_installed=0; free(check_install_command); - check_install_command = get_package_is_updated_command(tab->module); - if (!system(check_install_command)){ + check_install_command = get_package_is_updated_command(target_module); + if (!system(yon_debug_output("%s\n",check_install_command))){ tab->module_updated = 0; } else tab->module_updated = 1; free(check_install_command); - check_install_command = get_package_is_updated_command(tab->package); - if (!system(check_install_command)){ + check_install_command = get_package_is_updated_command(target_package); + if (!system(yon_debug_output("%s\n",check_install_command))){ tab->package_updated = 0; } else tab->package_updated = 1; free(check_install_command); @@ -200,7 +193,20 @@ void *yon_tab_set_installed(kernels_tab *tab){ } void *yon_interface_update(main_window *widgets){ - yon_clear_interface(widgets); + if (!main_config.kernel_tabs){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); + for (guint i=0;iAdditionsPackageBox)); + for (guint i=0;iMainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); yon_ubl_status_box_render(OPERATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_interface_update(widgets); } else { @@ -347,7 +357,6 @@ gboolean yon_terminal_get_progress(main_window *widgets){ void *yon_command_execute_async(char *command,main_window *widgets){ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),0); vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); - gtk_revealer_set_transition_type(GTK_REVEALER(widgets->MainRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); yon_terminal_integrated_start(widgets->InstallTerminal,yon_debug_output("%s\n",command)); glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); @@ -365,7 +374,8 @@ void on_module_install_accept(GtkWidget *, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); - char *modules_to_install = tab->module; + char *module_formated = yon_package_string_set(tab->module); + char *modules_to_install = module_formated; GtkTreeIter iter; for_iter (GTK_TREE_MODEL(window->liststore1),&iter){ @@ -374,7 +384,7 @@ void on_module_install_accept(GtkWidget *, dictionary *dict){ gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); if (status){ char *temp = yon_char_unite(modules_to_install," ", package, NULL); - if (strcmp(modules_to_install,tab->module)) free(modules_to_install); + if (strcmp(modules_to_install,module_formated)) free(modules_to_install); modules_to_install = temp; } } @@ -390,7 +400,8 @@ void on_package_install_accept(GtkWidget *, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); - char *modules_to_install = tab->package; + char *package_formated = yon_package_string_set(tab->package); + char *modules_to_install = package_formated; GtkTreeIter iter; for_iter (GTK_TREE_MODEL(window->liststore1),&iter){ @@ -399,7 +410,7 @@ void on_package_install_accept(GtkWidget *, dictionary *dict){ gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); if (status){ char *temp = yon_char_unite(modules_to_install," ", package, NULL); - if (strcmp(modules_to_install,tab->module)) free(modules_to_install); + if (strcmp(modules_to_install,package_formated)) free(modules_to_install); modules_to_install = temp; } } @@ -460,7 +471,8 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ data->function = NULL; data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ - char *command = install_command(tab->module); + char *target = yon_package_string_set(tab->module); + char *command = install_command(target); yon_command_execute_async(command,widgets); tab->module_installed=1; } @@ -501,7 +513,8 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ data->function = NULL; data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ - char *command = install_command(tab->package); + char *target = yon_package_string_set(tab->package); + char *command = install_command(target); yon_command_execute_async(command,widgets); tab->package_installed=1; } @@ -524,7 +537,8 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ data->function = NULL; data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ - char *command = remove_command(tab->module); + char *target = yon_package_string_set(tab->module); + char *command = remove_command(target); g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_module_remove_done),tab); yon_command_execute_async(command,widgets); tab->module_installed=0; @@ -541,7 +555,8 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ data->data = NULL; int resp = yon_confirmation_dialog_call(self,data); if (resp == GTK_RESPONSE_ACCEPT){ - char *command = remove_command(tab->package); + char *target = yon_package_string_set(tab->package); + char *command = remove_command(target); yon_command_execute_async(command,widgets); tab->package_installed=0; } @@ -660,21 +675,21 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo char *passw = types_parsed[k][0]==' '?yon_char_divide(types_parsed[k],0):NULL; if (passw) free(passw); char *tag_type = NULL; - if (!strcmp(types_parsed[k],LTS_TAG)){ + if (!strcmp(_(types_parsed[k]),LTS_TAG)){ tag_type = "tag_blue"; - } else if (!strcmp(types_parsed[k],STABLE_TAG)){ + } else if (!strcmp(_(types_parsed[k]),STABLE_TAG)){ tag_type = "tag_green"; - } else if (!strcmp(types_parsed[k],REALTIME_TAG)){ + } else if (!strcmp(_(types_parsed[k]),REALTIME_TAG)){ tag_type = "tag_orange"; - } else if (!strcmp(types_parsed[k],HARDENED_TAG)){ + } else if (!strcmp(_(types_parsed[k]),HARDENED_TAG)){ tag_type = "tag_yellow"; - } else if (!strcmp(types_parsed[k],RECOMENDED_TAG)){ + } else if (!strcmp(_(types_parsed[k]),RECOMENDED_TAG)){ tag_type = "tag_blue"; - } else if (!strcmp(types_parsed[k],REACTIVE_TAG)){ + } else if (!strcmp(_(types_parsed[k]),REACTIVE_TAG)){ tag_type = "tag_purple"; } else continue; - yon_tag_add(GTK_BOX(tab->tags_box),types_parsed[k],tag_type,NULL); + yon_tag_add(GTK_BOX(tab->tags_box),_(types_parsed[k]),tag_type,NULL); } tab->module_requirements = yon_char_parse(parsed[3],&tab->module_requirements_size,","); tab->package_requirements = yon_char_parse(parsed[4],&tab->package_requirements_size,","); @@ -855,6 +870,9 @@ void on_info_clicked(GtkWidget *, main_window *widgets){ char *package=NULL; if ((package = strstr(target_str,": "))){ package+=2; + if (strstr(package,",")){ + package = yon_char_replace(package,","," "); + } } config_str info = yon_config_load(get_package_info_command(package),&size); if (size!=-1){ @@ -1004,7 +1022,7 @@ void yon_main_window_complete(main_window *widgets){ glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); - gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->MainRevealer); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->TerminalRevealer); yon_interface_update(widgets); yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 9eab431..cb9f76a 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -48,7 +48,7 @@ #define get_package_is_installed_command(target) yon_char_append("pacman -Qq ",target) #define get_package_is_updated_command(target) yon_char_append("pacman -Qu ",target) -#define install_command(target) yon_char_append("pacman -S --noconfirm ",target) +#define install_command(target) yon_char_append("pacman -Sy --noconfirm ",target) #define remove_command(target) yon_char_append("pacman -R --noconfirm ",target) #define get_active_kernel_command "cat /usr/lib/modules/$(uname -r)/pkgbase" @@ -211,7 +211,7 @@ typedef struct { void on_save_done(main_window *widgets, config_str output, int size); -gboolean yon_clear_interface(main_window *widgets); +char *yon_package_string_set(char *target); gboolean yon_tab_create_tags(kernels_tab *tab); void *yon_tab_set_installed(kernels_tab *tab); void *yon_interface_update(main_window *widgets); diff --git a/ubl-settings-kernel-additions-table-row.glade b/ubl-settings-kernel-additions-table-row.glade index 40c673c..14a339a 100644 --- a/ubl-settings-kernel-additions-table-row.glade +++ b/ubl-settings-kernel-additions-table-row.glade @@ -48,7 +48,6 @@ True False Name - True False 0 @@ -86,6 +85,7 @@ True False Module + True 0 @@ -122,6 +122,7 @@ True False Package + True 0 @@ -150,6 +151,7 @@ False 5 vertical + 2 diff --git a/ubl-settings-kernel.css b/ubl-settings-kernel.css index 5e3a34f..8db3f19 100644 --- a/ubl-settings-kernel.css +++ b/ubl-settings-kernel.css @@ -154,72 +154,79 @@ background:transparent; border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#a25757; + border-color: #d8504e; - background-color:#ab709a + background-color:#ea9999 } .tag_blue{ border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#4973a1; + border-color: #3e85e7; - background-color:#33aadf + background-color:#9fc5f8 } .tag_purple{ border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#41346a; + border-color: #9d17f9; - background-color:#ab709a + background-color:#b4a7d6 } .tag_orange{ border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#a87644; + border-color: #fea11a; - background-color:#ffac40 + background-color:#f9cb9c } .tag_yellow{ border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#866715; + border-color: #cca11f; - background-color:#ffd070 + background-color:#ffe599 } .tag_green{ border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#61815a; + border-color: #2aab37; - background-color:#80ff80 + background-color:#c8e1be } .tag_grey{ border-radius: 2px; border-width: 0.5px; border-style: solid; - margin:2px; - color:#2f2f2f; + padding:2px 5px; + color:#5f5f5f; + border-color: #777777; background-color:#999999 } .updatebutton { - background-color: #ef7a7a; + background-color: #e06666; color: @theme_bg_color; - border-color: #aa5555; + border-color: #a36666; } .updatebutton *{ - background-color: #ef7a7a; + background-color: #e06666; color: @theme_bg_color; } .updatebutton:active { @@ -232,11 +239,11 @@ background:transparent; color: @theme_bg_color; } .updatebutton:disabled { - background-color: #ffcfcf; + background-color: transparent; border-color: @insensitive_fg_color; border-width:0.5px; } .updatebutton *:disabled { - background-color: #ffcfcf; + background-color: transparent; color: @insensitive_fg_color; } \ No newline at end of file diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 1df447e..b435b95 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -52,118 +52,39 @@ 1 10 - + True False end slide-up - True True False - vertical - 5 - + True - False - slide-up - - - True - False - - - True - False - True - adjustment1 - natural - UTF-8 - True - True - False - - - True - True - 0 - - - - - True - False - vertical - adjustment1 - - - False - True - 1 - - - - + False + True + adjustment1 + natural + UTF-8 + True + True + False - False + True True 0 - + True False - 0 - in - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 5 - - - True - False - center - - - True - True - 0 - - - - - More - True - True - True - - - False - True - 2 - - - - - - - - - + vertical + adjustment1 False @@ -171,14 +92,8 @@ 1 - - True @@ -389,5 +304,91 @@ 0 + + + True + False + end + slide-up + True + + + True + False + vertical + 5 + + + True + False + 0 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + 5 + + + True + False + center + + + True + True + 0 + + + + + More + True + True + True + + + False + True + 2 + + + + + + + + + + + + False + True + 1 + + + + + + + + + False + True + 1 + + diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po index 5a3311e..eeeff5a 100644 --- a/ubl-settings-kernel_ru.po +++ b/ubl-settings-kernel_ru.po @@ -133,7 +133,7 @@ msgstr "Рекомендуется" #: source/ubl-strings.h:38 msgid "Hardened" -msgstr "" +msgstr "Усиленная защита" #: source/ubl-strings.h:39 msgid "RealTime" -- 2.35.1 From 150ab59d1b5e5358b23fe45029d1370602827025 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 19 Nov 2024 17:38:21 +0600 Subject: [PATCH 37/37] Changed icon names --- ...{download.svg => com.ublinux.ubl-settings-kernel-download.svg} | 0 ...e-lines.svg => com.ublinux.ubl-settings-kernel-file-lines.svg} | 0 .../{hashtag.svg => com.ublinux.ubl-settings-kernel-hashtag.svg} | 0 .../{cubes.svg => com.ublinux.ubl-settings-kernel-cubes.svg} | 0 .../{dropbox.svg => com.ublinux.ubl-settings-kernel-dropbox.svg} | 0 ...check.svg => com.ublinux.ubl-settings-kernel-square-check.svg} | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename icons/actions/{download.svg => com.ublinux.ubl-settings-kernel-download.svg} (100%) rename icons/actions/{file-lines.svg => com.ublinux.ubl-settings-kernel-file-lines.svg} (100%) rename icons/actions/{hashtag.svg => com.ublinux.ubl-settings-kernel-hashtag.svg} (100%) rename icons/status/{cubes.svg => com.ublinux.ubl-settings-kernel-cubes.svg} (100%) rename icons/status/{dropbox.svg => com.ublinux.ubl-settings-kernel-dropbox.svg} (100%) rename icons/status/{square-check.svg => com.ublinux.ubl-settings-kernel-square-check.svg} (100%) diff --git a/icons/actions/download.svg b/icons/actions/com.ublinux.ubl-settings-kernel-download.svg similarity index 100% rename from icons/actions/download.svg rename to icons/actions/com.ublinux.ubl-settings-kernel-download.svg diff --git a/icons/actions/file-lines.svg b/icons/actions/com.ublinux.ubl-settings-kernel-file-lines.svg similarity index 100% rename from icons/actions/file-lines.svg rename to icons/actions/com.ublinux.ubl-settings-kernel-file-lines.svg diff --git a/icons/actions/hashtag.svg b/icons/actions/com.ublinux.ubl-settings-kernel-hashtag.svg similarity index 100% rename from icons/actions/hashtag.svg rename to icons/actions/com.ublinux.ubl-settings-kernel-hashtag.svg diff --git a/icons/status/cubes.svg b/icons/status/com.ublinux.ubl-settings-kernel-cubes.svg similarity index 100% rename from icons/status/cubes.svg rename to icons/status/com.ublinux.ubl-settings-kernel-cubes.svg diff --git a/icons/status/dropbox.svg b/icons/status/com.ublinux.ubl-settings-kernel-dropbox.svg similarity index 100% rename from icons/status/dropbox.svg rename to icons/status/com.ublinux.ubl-settings-kernel-dropbox.svg diff --git a/icons/status/square-check.svg b/icons/status/com.ublinux.ubl-settings-kernel-square-check.svg similarity index 100% rename from icons/status/square-check.svg rename to icons/status/com.ublinux.ubl-settings-kernel-square-check.svg -- 2.35.1