Merge pull request 'master' (#73) from YanTheKaller/ubl-settings-manager:master into master

Reviewed-on: #73
pull/75/head
Dmitry Razumov 5 months ago
commit 1eeb091792

28
.gitignore vendored

@ -1,22 +1,14 @@
.vscode/
config.conf
ubconfig-main-back.conf
gtk-dark.css
msgformat.py
calendarApp.glade
calendarApp.glade~
ubl-settings-manager.glade~
*ubl-settings-manager.glade#
*#
ubl-settings-manager
**base.mo
home/
css/
.config/
images/
locale/
ui/
ubl-settings-manager_ru.pos
ubl-settings-manager_ru.po~
deleted
ubl-settings-TEMPLATE
ubl-settings-repo-back/ubl-settings-repo-back
*~
build/
compile/
terminal-commands/
source/ubl-cmake.h
.BUILD.md
.updatebuild.sh
.install.sh
*vgcore*

@ -2,11 +2,16 @@
<gresources>
<gresource prefix="/com/ublinux/ui">
<file>ubl-settings-manager.glade</file>
<file>ubl-settings-manager-settings.glade</file>
<file>ubl-settings-manager-theme-gnome.glade</file>
<file>ubl-settings-manager-theme-gnome-section.glade</file>
<file>ubl-settings-manager-theme-main.glade</file>
<file>ubl-settings-manager-settings-sections.glade</file>
</gresource>
<gresource prefix="/com/ublinux/css">
<file>ubl-settings-manager.css</file>
</gresource>
<gresource prefix="/com/ublinux/images">
<file>ubl-settings-manager-banner.png</file>
<file>manager-banner.png</file>
</gresource>
</gresources>

Before

Width:  |  Height:  |  Size: 260 KiB

After

Width:  |  Height:  |  Size: 260 KiB

@ -15,10 +15,7 @@ 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)
add_definitions(-DWEBKIT_FOUND)
PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
include_directories(${WEBKIT_INCLUDE_DIRS})
link_directories(${WEBKIT_LIBRARY_DIRS})
@ -33,8 +30,13 @@ add_custom_target(GLADE ubl-settings-manager.glade)
set(DEPENDFILES
../ubl-settings-manager.glade
../ubl-settings-manager-settings.glade
../ubl-settings-manager-theme-gnome.glade
../ubl-settings-manager-theme-gnome-section.glade
../ubl-settings-manager-theme-main.glade
../ubl-settings-manager-settings-sections.glade
../gresource.xml
../ubl-settings-manager-banner.png
../manager-banner.png
../ubl-settings-manager.css
)
@ -58,21 +60,32 @@ add_custom_target(
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}
)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -lm")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -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-manager.c
ubl-settings-manager-settings.c
ubl-settings-manager-theme.c
ubl-settings-manager-theme-gnome.c
ubl-settings-manager-app-sections.c
ubl-settings-manager.h
ubl-strings.h
)
message(${GTK_LIBRARIES})
set(LIBRARIES
${GTK_LIBRARIES}
${WEBKIT_LIBRARIES}
${VTE291_LIBRARIES}
pthread)
pthread
ublsettings
ublsettings-gtk3
ublsettingsui-gtk3)
add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})

@ -0,0 +1,7 @@
#include "ubl-settings-manager.h"
app_section *yon_app_section_new(){
app_section *new_section = malloc(sizeof(app_section));
memset(new_section,0,sizeof(app_section));
return new_section;
}

@ -0,0 +1,82 @@
#include "ubl-settings-manager.h"
gboolean on_settings_size_changed(GtkRange* , GtkScrollType* , gdouble value, settings_window *window){
long val = (long)value;
int size = val-val%8;
if (size<24) size=24;
if (size>64) size=64;
window->icon_size = size;
char *size_full = g_strdup_printf("%dx%d",size,size);
gtk_label_set_text(GTK_LABEL(window->SizeLabel),size_full);
gtk_image_set_from_pixbuf(GTK_IMAGE(window->SizeIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(), icon_path,size,1,GTK_ICON_LOOKUP_FORCE_SIZE),NULL));
free(size_full);
return 0;
}
void on_settings_accept(GtkWidget *, settings_window *window){
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
yon_window_config_add_instant_parameter(icon_size_parameter,"Settings",&window->icon_size,YON_TYPE_INT);
char *cur_theme = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ThemeCombo));
if (cur_theme)
yon_window_config_add_instant_parameter(theme_parameter,"Settings",cur_theme,YON_TYPE_STRING);
int double_click = gtk_switch_get_active(GTK_SWITCH(window->DoubleClickSwitch));
yon_window_config_add_instant_parameter(double_click_parameter,"Settings",&double_click,YON_TYPE_INT);
yon_interface_update(widgets);
on_subwindow_close(window->Window);
}
settings_window *yon_settings_window_new(){
settings_window *window = malloc(sizeof(settings_window));
memset(window,0,sizeof(window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_settings);
window->Window = yon_gtk_builder_get_widget(builder,"Window");
window->SizeSlider = yon_gtk_builder_get_widget(builder,"SizeSlider");
window->SizeLabel = yon_gtk_builder_get_widget(builder,"SizeLabel");
window->SizeIcon = yon_gtk_builder_get_widget(builder,"SizeIcon");
window->ThemeCombo = yon_gtk_builder_get_widget(builder,"ThemeCombo");
window->DoubleClickSwitch = yon_gtk_builder_get_widget(builder,"DoubleClickSwitch");
window->SectionsConfigurationButton = yon_gtk_builder_get_widget(builder,"SectionsConfigurationButton");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_settings_accept),window);
g_signal_connect(G_OBJECT(window->SizeSlider),"change-value",G_CALLBACK(on_settings_size_changed),window);
int size;
config_str themes = (config_str)g_hash_table_get_keys_as_array(main_config.themes,&size);
qsort(themes,size,sizeof(char*),yon_char_parsed_compare);
for (int i=0;i<size;i++){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ThemeCombo),themes[i],themes[i]);
}
char *theme_id = NULL;
if (yon_window_config_get_parameter("Settings",theme_parameter,&theme_id,YON_TYPE_STRING)){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ThemeCombo),theme_id);
} else {
gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ThemeCombo),GNOME_THEME_LABEL);
}
window->icon_size;
if (!yon_window_config_get_parameter("Settings",icon_size_parameter,&window->icon_size,YON_TYPE_INT)){
window->icon_size=32;
}
gtk_range_set_value(GTK_RANGE(window->SizeSlider),window->icon_size);
int double_click_activate;
if (!yon_window_config_get_parameter("Settings",double_click_parameter,&double_click_activate,YON_TYPE_BOOLEAN)){
double_click_activate=0;
}
gtk_switch_set_active(GTK_SWITCH(window->DoubleClickSwitch),double_click_activate);
return window;
}
void on_settings_open(GtkWidget *, main_window *widgets){
settings_window *window = yon_settings_window_new();
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"settings_window");
gtk_widget_show(window->Window);
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
}

@ -0,0 +1,151 @@
#include "ubl-settings-manager.h"
typedef struct {
GtkWidget *expander;
GtkWidget *AppsList;
app_section *section;
} gnome_section;
void on_gnome_plug_connected(GtkWidget *,gnome_theme_struct *theme){
gtk_widget_show(theme->SocketBox);
gtk_widget_hide(theme->HideBox);
}
void on_gnome_plug_disconnected(GtkWidget *,gnome_theme_struct *theme){
gtk_widget_show(theme->HideBox);
gtk_widget_hide(theme->SocketBox);
on_plug_disconnected(GTK_SOCKET(theme->Socket),main_config.widgets);
}
void on_gnome_activate(GtkWidget *,GtkListBoxRow *self, gnome_theme_struct *theme);
void on_gnome_activate(GtkWidget *,GtkListBoxRow *self, gnome_theme_struct *theme){
theme->Socket = GTK_WIDGET(yon_sockets_init(GTK_BOX(theme->SocketBox)));
g_signal_connect(G_OBJECT(theme->Socket),"plug_added",G_CALLBACK(on_gnome_plug_connected),theme);
g_signal_connect(G_OBJECT(theme->Socket),"destroy",G_CALLBACK(on_gnome_plug_disconnected),theme);
apps *cur_app = g_object_get_data(G_OBJECT(self),"apps");
char *command = cur_app->Exec;//launch_command(cur_app->Desktop_path);
char *command_args = NULL;
if (cur_app->DualPluggable==1){
char *save_socket = yon_get_save_socket();
char *load_socket = yon_get_load_socket();
char *main_socket_id = yon_char_from_long((long)gtk_socket_get_id(GTK_SOCKET(theme->Socket)));
command_args = launch_args_command(main_socket_id,load_socket,save_socket);
} else if (cur_app->Pluggable){
char *main_socket_id = yon_char_from_long((long)gtk_socket_get_id(GTK_SOCKET(theme->Socket)));
command_args = yon_char_unite("--socket-id=",main_socket_id,NULL);
}
yon_launch_app_with_arguments(command,command_args);
}
void on_gnome_selected(GtkWidget *self_list,GtkListBoxRow *self, gnome_theme_struct *theme);
void on_gnome_selected(GtkWidget *self_list,GtkListBoxRow *self, gnome_theme_struct *theme){
GList *list = gtk_container_get_children(GTK_CONTAINER(theme->AppsTree));
GList *iter;
for (iter=list;iter;iter=iter->next){
gnome_section *cur_section = g_object_get_data(G_OBJECT(iter->data),"gnome_section");
if (cur_section->AppsList != self_list){
g_signal_handlers_block_by_func(G_OBJECT(cur_section->AppsList),G_CALLBACK(on_gnome_selected),theme);
gtk_list_box_unselect_all(GTK_LIST_BOX(cur_section->AppsList));
g_signal_handlers_unblock_by_func(G_OBJECT(cur_section->AppsList),G_CALLBACK(on_gnome_selected),theme);
}
}
}
void on_gnome_socket_add(){
}
gnome_section *yon_gnome_section_new(){
gnome_section *cur_section = malloc(sizeof(gnome_section));
memset(cur_section,0,sizeof(cur_section));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_gnome_section);
cur_section->expander = yon_gtk_builder_get_widget(builder,"MainExpander");
cur_section->AppsList = yon_gtk_builder_get_widget(builder,"AppsList");
return cur_section;
}
void yon_gnome_section_setup_apps(gnome_section *cur_section, const char *target){
apps *cur_app = yon_apps_get((char*)target);
GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(), !yon_char_is_empty(cur_app->Icon)?cur_app->Icon:icon_path, main_config.apps_icon_size,1,GTK_ICON_LOOKUP_FORCE_SIZE);
GtkWidget *Image = NULL;
if (info){
Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL));
} else {
info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(), icon_path, main_config.apps_icon_size,1,GTK_ICON_LOOKUP_FORCE_SIZE);
Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL));
}
GtkWidget *Label = gtk_label_new(cur_app->Name);
GtkWidget *Row = gtk_list_box_row_new();
GtkWidget *Box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
gtk_container_add(GTK_CONTAINER(Row),Box);
gtk_box_pack_start(GTK_BOX(Box),Image,0,0,0);
gtk_box_pack_start(GTK_BOX(Box),Label,0,0,0);
gtk_label_set_xalign(GTK_LABEL(Label),0);
gtk_list_box_insert(GTK_LIST_BOX(cur_section->AppsList),Row,-1);
g_object_set_data(G_OBJECT(Row),"gnome_section",cur_section);
g_object_set_data(G_OBJECT(Row),"apps",cur_app);
gtk_widget_show_all(Row);
}
void yon_gnome_section_setup(gnome_theme_struct *theme,app_section *section){
gnome_section *cur_section = yon_gnome_section_new();
cur_section->section = section;
gtk_expander_set_label(GTK_EXPANDER(cur_section->expander),section->name);
int app_size;
config_str app_list = yon_apps_get_by_categories(section->categories,section->categories_size,&app_size);
for(int i=0;i<app_size;i++){
yon_gnome_section_setup_apps(cur_section,app_list[i]);
}
gtk_box_pack_start(GTK_BOX(theme->AppsTree),cur_section->expander,0,0,0);
g_object_set_data(G_OBJECT(cur_section->expander),"gnome_section",cur_section);
g_signal_connect(G_OBJECT(cur_section->AppsList),"row-activated",G_CALLBACK(on_gnome_activate),theme);
g_signal_connect(G_OBJECT(cur_section->AppsList),"row-selected",G_CALLBACK(on_gnome_selected),theme);
}
int yon_gnome_update(gnome_theme_struct *theme){
if (!main_config.sections) return 0;
GList *list = gtk_container_get_children(GTK_CONTAINER(theme->AppsTree));
GList *iter;
for (iter=list;iter;iter=iter->next){
gnome_section *cur_section = g_object_get_data(G_OBJECT(iter->data),"gnome_section");
gtk_widget_destroy(cur_section->expander);
free(cur_section);
}
int size;
dictionary *cur;
for_dictionaries(cur,main_config.sections){
app_section *section_data = yon_dictionary_get_data(cur,app_section*);
yon_gnome_section_setup(theme,section_data);
}
return 1;
}
gnome_theme_struct *yon_gnome_theme_new(){
gnome_theme_struct *theme = malloc(sizeof(gnome_theme_struct));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_gnome_theme);
theme->MainBox = yon_gtk_builder_get_widget(builder,"MainBox");
theme->AppsTree = yon_gtk_builder_get_widget(builder,"AppsTree");
theme->SocketBox = yon_gtk_builder_get_widget(builder,"SocketBox");
theme->GnomePaned = yon_gtk_builder_get_widget(builder,"GnomePaned");
theme->GnomeInfoLogoImage = yon_gtk_builder_get_widget(builder,"GnomeInfoLogoImage");
theme->HideBox = yon_gtk_builder_get_widget(builder,"HideBox");
theme->IconCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"IconCell"));
theme->theme_name = yon_char_new(GNOME_THEME_LABEL);
theme->Socket = gtk_socket_new();
theme->list_update_func = (int(*)(struct gnome_theme_struct*))yon_gnome_update;
gtk_box_pack_start(GTK_BOX(theme->SocketBox),theme->Socket,1,1,0);
gtk_widget_show(theme->Socket);
g_signal_connect(G_OBJECT(theme->SocketBox),"add",G_CALLBACK(on_gnome_socket_add),theme);
// gtk_cell_renderer_set_fixed_size(theme->IconCell,main_config.apps_icon_size,main_config.apps_icon_size);
return theme;
}

@ -0,0 +1,61 @@
#include "ubl-settings-manager.h"
theme_struct *yon_theme_update(main_window *widgets){
char *theme_id;
if (!yon_window_config_get_parameter("Settings","theme",&theme_id,YON_TYPE_STRING)){
theme_id = yon_char_new(GNOME_THEME_LABEL);
}
theme_struct *theme = ((theme_struct*(*)())g_hash_table_lookup(main_config.themes,theme_id))();
if (theme){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->ThemeBox));
GList *iter;
for (iter = list;iter;iter=iter->next){
theme_struct *cur_theme = g_object_get_data(G_OBJECT(iter->data),"theme_struct");
if (cur_theme) free(cur_theme);
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
gtk_box_pack_start(GTK_BOX(widgets->ThemeBox),theme->MainBox,1,1,0);
return theme;
} else {
yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),THEME_ERROR_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
}
return NULL;
}
void yon_theme_init(){
// theme_struct *gnome_struct = (theme_struct*)yon_gnome_theme_new();
// theme_struct *main_struct = (theme_struct*)yon_main_theme_new();
g_hash_table_insert(main_config.themes,yon_char_new(GNOME_THEME_LABEL),yon_gnome_theme_new);
g_hash_table_insert(main_config.themes,yon_char_new(MAIN_THEME_LABEL),yon_main_theme_new);
}
void yon_main_update(main_theme_struct *theme){
}
void on_main_activate(){
}
void on_main_socket_add(){
}
main_theme_struct *yon_main_theme_new(){
main_theme_struct *theme = malloc(sizeof(main_theme_struct));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_main_theme);
theme->MainBox = yon_gtk_builder_get_widget(builder,"MainBox");
theme->AppsIconView = yon_gtk_builder_get_widget(builder,"AppsIconView");
theme->SocketBox = yon_gtk_builder_get_widget(builder,"SocketBox");
theme->AppsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AppsList"));
theme->theme_name = yon_char_new(MAIN_THEME_LABEL);
theme->Socket = NULL;
theme->list_update_func = (int(*)(struct main_theme_struct*))yon_main_update;
g_signal_connect(G_OBJECT(theme->AppsIconView),"item-activated",G_CALLBACK(on_main_activate),theme);
g_signal_connect(G_OBJECT(theme->SocketBox),"add",G_CALLBACK(on_main_socket_add),theme);
return theme;
}

File diff suppressed because it is too large Load Diff

@ -20,22 +20,28 @@
#include <math.h>
#include <wctype.h>
#include <sys/stat.h>
#include <libublsettings.h>
#include <libublsettings-gtk3.h>
#include <libublsettingsui-gtk3.h>
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
#include "ubl-strings.h"
#define UBLINUX_WIKI_COMMAND "xdg-open https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-manager"
#define UBLINUX_WIKI_LINK " https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-manager"
#define check_web2kit_command "ldconfig -p |grep webkit2"
#define cmdVersionText yon_char_get_augumented(yon_char_get_augumented(_("Version: "),version_application),"\n")
#define cmdHelpText yon_char_get_augumented(yon_char_get_augumented(_("ubl-settings-manager version: "),version_application),_("\nGTK settings manager for UBLinux\nUsage: ubl-settings-manager [OPTIONS...]\nOptions:\n -h, --help Show this help\n -V, --version Show package version\n --lock-settings Lock menu settings\n"))
#define GladePath "/com/ublinux/ui/ubl-settings-manager.glade"
#define glade_path "/com/ublinux/ui/ubl-settings-manager.glade"
#define glade_path_gnome_theme "/com/ublinux/ui/ubl-settings-manager-theme-gnome.glade"
#define glade_path_gnome_section "/com/ublinux/ui/ubl-settings-manager-theme-gnome-section.glade"
#define glade_path_main_theme "/com/ublinux/ui/ubl-settings-manager-theme-main.glade"
#define glade_path_settings "/com/ublinux/ui/ubl-settings-manager-settings.glade"
#define CssPath "/com/ublinux/css/ubl-settings-manager.css"
#define GlobalConfigPath "/etc/xdg/ubl-settings-manager/ubl-settings-manager.conf"
#define UserConfigPath "/.config/ubl-settings-manager/ubl-settings-manager.conf"
#define AppIconPath "com.ublinux.ubl-settings-manager"
#define icon_path "com.ublinux.ubl-settings-manager"
#define AppBannerPath "/com/ublinux/images/ubl-settings-manager-banner.png"
#define DesktopPath "/usr/share/applications/"
#define IconPicturesPath "/usr/share/icons/hicolor/scalable/apps/"
@ -43,56 +49,26 @@
#define LocaleName "ubl-settings-manager"
#define ubl_settings_infoPath "ubl-settings-info"
#define ubl_settings_infoPathLaunch "ubl-settings-info --socket-id="
typedef char* string;
string version_application;
#define UBL_SETTINGS_MANAGER_TITLE _("UBLinux Settings Manager")
#define UBL_SETTINGS_MANAGER_ABOUT_TITLE _("About UBLinux Settings Manager")
#define ABOUT_PROJECT_HOME_PAGE_LABEL _("Project Home Page")
#define ABOUT_PROJECT_COMMENTS_LABEL _("Settings manager for UBLinux")
#define CONFIG_LOAD_ERROR _("Config loading failed!\n")
#define DOUBLE_CLICK_SELECTION_LABEL _("Double click selection")
#define SECTIONS_MANAGEMENT_LABEL _("Sections management")
#define UNDERSTOOD_LABEL _("Understood")
#define ABOUT_LABEL _("About...")
#define DOCUMENTATION_LABEL _("Documentation")
#define SETTINGS_LABEL _("Settings")
#define ALWAYS_REDIRECT_LABEL _("Always redirect")
#define APPLY_LABEL _("Apply")
#define SAVE_AND_APPLY_LABEL _("Save and apply")
#define CLOSE_LABEL _("Close")
#define CANCEL_LABEL _("Cancel")
#define READ_ONLINE_LABEL _("Read online")
#define REDIRECTION_COMMENT_LABEL _("You will be redirected to documentation site, where user help pages are translated and supported by community.")
#define REDIRECTION_LABEL _("Would you like to read documentation in the Web?")
#define WINDOW_THEME_LABEL _("Window theme")
#define ICON_SIZE_LABEL _("Icon size")
#define BACK_TO_ALL_SETTINGS_LABEL _("All settings")
#define launch_command(target) yon_char_unite("xdg-open ",target,NULL)
#define launch_args_command(main_socket,load_socket,save_socket) yon_char_unite("--socket-id=",main_socket," --socket-ext-id=",save_socket," --socket-trd-id=",load_socket,NULL)
#define double_click_parameter "double_click"
#define icon_size_parameter "icon_size"
#define theme_parameter "theme"
#define hide_banner_parameter "hide_banner"
typedef char* string;
__attribute__((unused)) static \
string version_application;
typedef struct apps{
char *Name;
int Type;
char *Categories;
char *Exec;
char *Icon;
int Pluggable;
int DualPluggable;
} apps;
#define _(String) gettext(String)
typedef struct {
char *command;
int *exitcode;
} thread_output;
typedef struct dictionary {
char *key;
void *data;
struct dictionary *next;
struct dictionary *prev;
struct dictionary *first;
} dictionary;
typedef struct IVGrapgicals{
char *sectionName;
char *categories;
@ -109,33 +85,6 @@ typedef struct IconSection{
char *categories;
} IconSection;
typedef struct {
int windowWidth;
int windowHeight;
int windowPosX;
int windowPosY;
int WindowTheme;
char *curThemeName;
int Mainiconsize;
int Gnomeiconsize;
int iconSegmentSize;
dictionary *sections;
int MainlabelSize;
int GnomelabelSize;
int *currentThemeLabelSize;
int *currentThemeIconSize;
int labelDensity;
char *lastUser;
int changed;
int fullscreen;
int lock_settings;
int GnomeDoubleClick;
int MainDoubleClick;
int *currentDoubleClick;
dictionary *SettingsSections;
int BannerHidden;
} config;
typedef struct {
GtkWidget *MainFrame;
GtkWidget *MainBox;
@ -158,140 +107,120 @@ typedef struct {
GtkWidget *DeleditBox;
} SectionSettingSegment;
typedef struct {
GtkBuilder *builder;
GtkWidget *window;
dictionary *ICSys;
GtkWidget *DesktopBasic;
GtkWidget *DesktopSocket;
GtkWidget *ButtonBackToMain;
GtkWidget *DialogOpenDocumentation;
GtkWidget *CancelHelpButton;
GtkWidget *ReadHelpButton;
GtkWidget *AlwaysOpenDocumentation;
GtkWidget *helpHeader;
GtkWidget *helpText;
GtkWidget *appSettings;
GtkWidget *SettingsWindow;
GtkWidget *settingsSizeSlider;
GtkWidget *settingsSizeInfoLabel;
GtkWidget *settingsThemeChooser;
GtkWidget *settingsCancel;
GtkWidget *settingsAccept;
GtkWidget *settingsIcon;
GtkWidget *socket;
GtkWidget *socketplace;
GtkWidget *HideWhileLaunch;
GtkWidget *MenuItemSettings;
GtkWidget *MenuItemDocumentation;
GtkWidget *MenuItemAboutSystem;
GtkWidget *LabelTitle;
GtkWidget *settingsSubmenuLabelSize;
GtkWidget *settingsSubmenuLabelTheme;
typedef struct theme_struct {
char *theme_name;
GtkWidget *MainBox; //theme main box, which connects to window
GtkWidget *SocketBox; //main socket box, where socket is being parented to
GtkWidget *HideBox; //box to hide when socket has been connected
int (*list_update_func)(struct theme_struct*); //function to update theme's lits of application
// GtkWidget *AppsTree; //theme application list container
// GtkWidget *Socket;
} theme_struct;
typedef struct gnome_theme_struct {
char *theme_name;
GtkWidget *MainBox;
GtkWidget *SocketBox;
GtkWidget *HideBox;
int (*list_update_func)(struct gnome_theme_struct*);
GtkWidget *AppsTree;
GtkWidget *Socket;
GtkWidget *GnomePaned;
GtkWidget *GnomeInfoLabel;
GtkWidget *workingwindow;
GtkWidget *settingsSectionsSettingsButton;
GtkWidget *SectionSettingsWindow;
GtkWidget *SectionSettingsPack;
dictionary *SettingsSections;
GtkWidget *SectionSettingAddButton;
GtkWidget *SectionSettingAddNameEntry;
GtkWidget *SectionSettingAddCategoriesEntry;
GtkWidget *SectionSettingsClearEntryButton;
GtkWidget *SectionSettingsSaveButton;
GtkWidget *SectionSettingsCloseButton;
GtkWidget *GnomeInfoDetailsLabel;
GtkWidget *CautionWindow;
GtkWidget *CautionUnderstandButton;
GtkWidget *socketbuttonplace;
GtkWidget *socketbutton;
GtkWidget *Overlay;
GtkWidget *ThirdSocketPlace;
GtkWidget *ThirdSocket;
int appssize;
apps *applist;
GtkWidget *icvpack;
GtkWidget *infoWarningWindow;
GtkWidget *infoWarningButton;
GtkWidget *infoWarningLabel;
GtkWidget *GnomeInfoLogoImage;
GtkCellRenderer *IconCell;
} gnome_theme_struct;
typedef struct main_theme_struct {
char *theme_name;
GtkWidget *MainBox;
GtkWidget *SocketBox;
GtkWidget *HideBox;
int (*list_update_func)(struct main_theme_struct*);
GtkWidget *AppsIconView;
GtkWidget *Socket;
GtkListStore *AppsList;
} main_theme_struct;
typedef struct {
GtkWidget *Window;
GtkWidget *StatusBox;
GtkWidget *TitleLabel;
GtkWidget *ThemeBox;
GtkWidget *SocketBox;
GtkWidget *BackButton;
GtkWidget *SettingsButton;
GtkWidget *BannerImage;
GtkWidget *BannerArrow;
GtkWidget *BannerButton;
GtkWidget *BannerRevealer;
GtkWidget *Revealer;
GtkWidget *settingsDoubleClickSwitch;
GtkWidget *settingsDoubleClickLabel;
GtkWidget *BackToSettingsLabel;
} actionWidgets;
GtkWidget *LoadSocket;
GtkWidget *LoadSocketBox;
GtkWidget *SaveSocket;
GtkWidget *SaveSocketBox;
GtkWidget *OptionsSocket;
GtkWidget *OptionsSocketBox;
typedef enum {
ACTIONWIDGETS,
ICONSECTION,
IVGRAPHICALS,
OTHER
GtkWidget *MainMenuItemSettings;
GtkWidget *MainMenuItemAbout;
GtkWidget *MainMenuItemDocumentation;
} DICT_TYPE;
theme_struct *current_theme;
void on_plug_added(GtkSocket* self, actionWidgets *builder);
void on_plug_removed(GtkSocket* self, actionWidgets *widgets);
void on_Item_activated(GtkIconView* self, GtkTreePath* path, actionWidgets *applist);
void on_gnome_Item_activated(GtkIconView* self, GtkTreePath* path, actionWidgets *applist);
void on_item_selection_changed(GtkIconView *IV, actionWidgets *widgets);
void on_ButtonOpenHelp_activated(GtkWidget *button, GtkBuilder *builder);
void on_backToSettingsButton_clicked(GtkWidget *button,actionWidgets *sctb);
void on_CancelHelpButton_activated(GtkWidget *button,GtkBuilder *builder);
void on_ReadHelpButton_activated(GtkWidget *button, GtkBuilder *builder);
int launch_app_with_arguments(char *name, char *args);
int launch_app(char *name);
int py_launch_app(char *name,char *args);
int on_settings_accept(GtkWidget *button, dictionary **widgetsDs);
void on_paned_move(GtkPaned* self, GtkScrollType* scroll_type, actionWidgets *widgets);
int on_settingsOpen(GtkWidget *button, actionWidgets *widgets);
int on_settings_icon_size_changed(GtkWidget* self, actionWidgets *widgets);
int on_settings_cancel(GtkWidget *button, actionWidgets *widgets);
apps *get_app_by_name(apps *applist,char *name, int size);
int reload_list(IVGraphicals *section);
int load_apps(IVGraphicals *section, apps *applist, int size);
int load_apps_with_clear(IVGraphicals *section, apps *applist, int size);
int hide_if_unfound(dictionary *widgetsDc);
GtkWidget *create_socket(actionWidgets *builder);
void sort_apps(apps *applist,int size);
apps *find_apps(int *sizef);
int check_categories(apps app, char *catstocheck);
int setup_config();
void update_double_clicks(dictionary *widgetsD);
void yon_icv_resize_item(dictionary *icdict, GtkWidget *paned);
dictionary *yon_theme_new(dictionary **widgetss, GtkBuilder *builder, char *theme_id, apps *applist, int appsize);
char *yon_char_get_augumented(char *source, char *append);
char *yon_cut(char *source, int size, int startpos);
int yon_set_sections(IconSection *section);
void yon_set_default_sections(dictionary *section);
char *yon_char_divide_search(char *source, char* dividepos, int delete_divider);
char *yon_char_divide(char *source, int dividepos);
dictionary *yon_section_new(dictionary *section, char *section_name, char *categories);
void yon_switch_theme(dictionary **dict, dictionary *newone);
dictionary *yon_dictionary_find(dictionary **dict, char *key);
void yon_segment_show(actionWidgets *widgets, SectionSettingSegment *sgm);
dictionary *yon_dictionary_create_empty();
dictionary *yon_dictionary_rip(dictionary *dict);
dictionary *yon_dictionary_get_last(dictionary *dict);
dictionary *yon_dictionary_switch_places(dictionary *dict,int aim);
dictionary *yon_dictionary_create_with_data(char *key, void *data);
dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data);
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect);
SectionSettingSegment *yon_create_section_setting(char *name, char *categories);
void yon_segments_show(actionWidgets *widgets);
void yon_segments_hide(actionWidgets *widgets);
void yon_dictionary_make_first(dictionary *dict);
dictionary *yon_create_icon_section_list(dictionary *sections);
int yon_show_icon_views(dictionary *IVS,actionWidgets *widgets);
void yon_icon_size_convert(int mode);
char *yon_char_new(char *chr);
int launch(thread_output *thread);
float yon_time_average(dictionary *times);
void yon_time_reg_for_average(dictionary *listofregs, int size, time_t tm);
void yon_dictionary_switch_to_last(dictionary **dict);
dictionary *yon_dictionary_create_conneced(dictionary *targetdict);
int yon_get_icon_size(int size);
char *yon_char_from_int(int int_to_convert);
} main_window;
typedef struct {
template_config_fields;
int apps_icon_size;
dictionary *sections;
int labelDensity;
int lock_settings;
int double_click;
dictionary *SettingsSections;
int banner_hidden;
main_window *widgets;
GHashTable *themes;
} config;
extern config main_config;
typedef struct {
char *name;
int categories_size;
config_str categories;
} app_section;
typedef struct {
GtkWidget *Window;
GtkWidget *SizeSlider;
GtkWidget *SizeLabel;
GtkWidget *SizeIcon;
GtkWidget *ThemeCombo;
GtkWidget *DoubleClickSwitch;
GtkWidget *SectionsConfigurationButton;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
int icon_size;
} settings_window;
void on_settings_accept(GtkWidget *, settings_window *window);
void yon_theme_init();
theme_struct *yon_theme_update(main_window *widgets);
gnome_theme_struct *yon_gnome_theme_new();
main_theme_struct *yon_main_theme_new();
app_section *yon_app_section_new();
gnome_theme_struct *yon_gnome_theme_new();
char *yon_get_save_socket();
char *yon_get_load_socket();
GtkSocket *yon_sockets_init(GtkBox *socketBox);
void on_plug_disconnected(GtkSocket *self, main_window *widgets);
int yon_char_parsed_compare(const void *a, const void *b);
void yon_interface_update(main_window *widgets);
void on_settings_open(GtkWidget *, main_window *widgets);
#endif

@ -0,0 +1,26 @@
#define TITLE_LABEL _("UBLinux Settings Manager")
#define TITLE_INFO_LABEL _("About UBLinux Settings Manager")
#define WIKI_LINK _("https://wiki.ublinux.ru/software/programs_and_utilities/all/ubl-settings-manager")
#define ABOUT_PROJECT_COMMENTS_LABEL _("Settings manager for UBLinux")
#define CONFIG_LOAD_ERROR _("Config loading failed!\n")
#define DOUBLE_CLICK_SELECTION_LABEL _("Double click selection")
#define SECTIONS_MANAGEMENT_LABEL _("Sections management")
#define UNDERSTOOD_LABEL _("Understood")
#define SETTINGS_LABEL _("Settings")
#define APPLY_LABEL _("Apply")
#define SAVE_AND_APPLY_LABEL _("Save and apply")
#define CLOSE_LABEL _("Close")
#define CANCEL_LABEL _("Cancel")
#define READ_ONLINE_LABEL _("Read online")
#define REDIRECTION_COMMENT_LABEL _("You will be redirected to documentation site, where user help pages are translated and supported by community.")
#define REDIRECTION_LABEL _("Would you like to read documentation in the Web?")
#define WINDOW_THEME_LABEL _("Window theme")
#define ICON_SIZE_LABEL _("Icon size")
#define BACK_TO_ALL_SETTINGS_LABEL _("All settings")
#define THEME_ERROR_LABEL _("Failed to load theme")
#define MAIN_THEME_LABEL _("Main theme")
#define GNOME_THEME_LABEL _("GNOME theme")

@ -0,0 +1,299 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-manager">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-manager.css -->
<object class="GtkWindow" id="SectionSettingsWindow">
<property name="can-focus">False</property>
<property name="default-width">800</property>
<property name="default-height">600</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="SectionSettingsPack">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">3</property>
<property name="bottom-padding">3</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButton" id="SectionSettingsClearEntryButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">center</property>
<property name="margin-right">3</property>
<property name="margin-end">3</property>
<property name="image">image2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="SectionSettingsAddNameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="truncate-multiline">True</property>
<property name="caps-lock-warning">False</property>
<property name="placeholder-text" translatable="yes">Section name</property>
<property name="input-purpose">name</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<child>
<object class="GtkButton" id="SectionSettingsAddButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-right">5</property>
<property name="margin-end">5</property>
<property name="image">image4</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">2</property>
<child>
<object class="GtkEntry" id="SectionSettingsAddCategoriesEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-left">5</property>
<property name="margin-right">10</property>
<property name="margin-start">5</property>
<property name="margin-end">10</property>
<property name="caps-lock-warning">False</property>
<property name="placeholder-text" translatable="yes">Identifier</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButton" id="SectionSettingsSaveButton">
<property name="label" translatable="yes">Save and apply</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-right">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<property name="image">image7</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SectionSettingsCloseButton">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="margin-right">15</property>
<property name="margin-end">15</property>
<property name="margin-bottom">5</property>
<property name="image">image6</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="SettingsBar2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child type="title">
<object class="GtkLabel" id="sectionsHeaderNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">UBLinux Settings Manager</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-manager</property>
<property name="icon_size">5</property>
</object>
</child>
</object>
</child>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">16</property>
<property name="icon-name">user-trash-symbolic</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">16</property>
<property name="icon-name">object-select-symbolic</property>
</object>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property>
</object>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property>
</object>
</interface>

@ -0,0 +1,295 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-manager">
<requires lib="gtk+" version="3.24"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="lower">24</property>
<property name="upper">64</property>
<property name="value">24</property>
<property name="step-increment">8</property>
<property name="page-increment">8</property>
</object>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
</object>
<object class="GtkImage" id="image9">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
</object>
<object class="GtkWindow" id="Window">
<property name="can-focus">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-manager</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">5</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="SizeLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="ypad">5</property>
<property name="label" translatable="yes">32x32</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScale" id="SizeSlider">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="adjustment">adjustment1</property>
<property name="fill-level">64</property>
<property name="round-digits">0</property>
<property name="digits">0</property>
<property name="draw-value">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="SizeIcon">
<property name="width-request">64</property>
<property name="height-request">64</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-manager</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="settingsSubmenuLabelSize">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="label" translatable="yes">Icon size</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">5</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkComboBoxText" id="ThemeCombo">
<property name="name">combo</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="active">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="settingsSubmenuLabelTheme">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="label" translatable="yes">Window theme</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="settingsDoubleClickLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Double click selection</property>
<property name="xalign">0.019999999552965164</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="DoubleClickSwitch">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="SectionsConfigurationButton">
<property name="label" translatable="yes">Sections management</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child type="title">
<object class="GtkLabel" id="TitleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">UBLinux Settings Manager</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-manager</property>
<property name="icon_size">5</property>
</object>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image8</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AcceptButton">
<property name="label" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image9</property>
</object>
<packing>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-manager">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-manager.css -->
<object class="GtkExpander" id="MainExpander">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkListBox" id="AppsList">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="activate-on-single-click">False</property>
<style>
<class name="separatorTop"/>
</style>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">expander</property>
</object>
</child>
</object>
</interface>

@ -0,0 +1,176 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-manager">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-manager.css -->
<object class="GtkTreeStore" id="AppsStore">
<columns>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Icon -->
<column type="GdkPixbuf"/>
<!-- column-name Description -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkBox" id="MainBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkPaned" id="GnomePaned">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="position">256</property>
<property name="position-set">True</property>
<property name="wide-handle">True</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkSearchEntry" id="SearchEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="primary-icon-name">edit-find-symbolic</property>
<property name="primary-icon-activatable">False</property>
<property name="primary-icon-sensitive">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="AppsTree">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkBox" id="GnomeMainBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="HideBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-right">3</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<child>
<object class="GtkImage" id="GnomeInfoLogoImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="pixel-size">156</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="SocketBox">
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
</object>
</interface>

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkListStore" id="liststoreTemplate">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gfloat1 -->
<column type="gfloat"/>
<!-- column-name gfloat2 -->
<column type="gfloat"/>
<!-- column-name gint1 -->
<column type="gint"/>
<!-- column-name GdkPixbuf1 -->
<column type="GdkPixbuf"/>
<!-- column-name gint2 -->
<column type="gint"/>
</columns>
</object>
<object class="GtkIconView" id="iconTemplate">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin">4</property>
<property name="hscroll-policy">natural</property>
<property name="item-orientation">horizontal</property>
<property name="model">liststoreTemplate</property>
<property name="item-width">135</property>
<property name="row-spacing">0</property>
<property name="column-spacing">2</property>
<property name="item-padding">5</property>
<property name="activate-on-single-click">True</property>
<child>
<object class="GtkCellRendererPixbuf" id="iconPic">
<property name="xpad">2</property>
</object>
<attributes>
<attribute name="width">5</attribute>
<attribute name="height">3</attribute>
<attribute name="xalign">1</attribute>
<attribute name="yalign">2</attribute>
<attribute name="pixbuf">4</attribute>
</attributes>
</child>
<child>
<object class="GtkCellRendererText">
<property name="xalign">0</property>
<property name="wrap-mode">word</property>
<property name="wrap-width">130</property>
</object>
<attributes>
<attribute name="height">3</attribute>
<attribute name="text">0</attribute>
</attributes>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
</interface>

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-manager">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-manager.css -->
<object class="GtkListStore" id="AppsList"/>
<object class="GtkBox" id="MainBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="HideBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="width-request">5</property>
<property name="height-request">5</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="resize-mode">immediate</property>
<property name="hscrollbar-policy">never</property>
<property name="vscrollbar-policy">always</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkIconView" id="AppsIconView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin">6</property>
<property name="model">AppsList</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="SocketBox">
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<style>
<class name="frontground"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
</interface>

@ -1,145 +1,342 @@
.bannerbackground {
background-color: #404040;
.thin {
margin:0px;
padding:0px;
}
.noborder {
border:none;
}
.borders *{
border-width:0.5px;
border-style: solid;
.thin{
padding:0px;
margin:0px;
transition: 0ms ease-out;
}
.thin:active {
background-color: @theme_selected_bg_color;
transition: 10ms ease-out;
.nobackground {
background:transparent;
}
.nobackground:active {
background:transparent;
}
.transparent {
background:none;
border:none;
transition: 0ms ease-out;
.textHead{
text-shadow: 2px 2px @theme_bg_color;
color: @theme_text_color;
}
#GnomeIcon{
.bggrey{
border-radius:5px;
border-color:@theme_text_color;
border-style:solid;
border-bottom-width: 1px;
border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%);
border-image-slice: 1;
border-width:0.3px;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.15);
}
#SepIcon{
background-color: alpha(@theme_text_color, 0.6);
.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;
}
#iconlabel {
font-size:14px;
font-weight: bold;
.menuitemtop{
margin-bottom:0px;
border-color:inherit;
border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop >*{
margin:4px 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitemmiddle >*{
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitembottom >*{
margin:0 2px 2px 2px;
padding: 3px 10px 3px 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:4px 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitemmiddle:hover>* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitembottom:hover>* {
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.boxInfoMessError{
background-color: #ea9999;
}
.roundborder > * {
border-width:0px;
.boxInfoMessOK{
background-color: #f3f0ac;
}
.roundborder:backdrop > * {
border-width:0px;
border-radius:5px;
.boxInfoMessGray{
background-color: darker(@theme_bg_color);
}
.noborder {
border: none;
.errorBox {
border-width: 2px;
border-color: #ea9999;
border-style:solid;
}
.menuitembottom{
margin-top:0px;
margin-bottom:3px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
.chosenOutline{
transition: 0ms;
border-width: 1px;
border-color: #f3f0ac;
border-style:solid;
}
.separatorTop{
border-color: darker (@theme_bg_color);
border-top-width:1px;
border-style:solid;
}
.separatorBottom{
border-color: darker (@theme_bg_color);
border-bottom-width:1px;
border-style:solid;
}
.marginright image{
margin-right: 2px;
}
.spinner_image{
-gtk-icon-transform: scale(2);
}
treeview row:nth-child(odd) { background-color: #000000; }
treeview row:nth-child(even) { background-color: #ffffff; }
.blackbg {
background-color: @theme_text_color;
}
.menuitemmiddle{
margin-top:0px;
margin-bottom:0px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
.toggletabs {
background-color: @background_color;
border:none;
border-radius:0px;
transition:0;
padding-top:7px;
padding-bottom:7px;
}
.menuitemtop{
margin-bottom:0px;
border-color:inherit;
border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
.toggletabs:disabled {
background-color: @background_color;
border:none;
border-radius:0px;
transition:0;
padding-top:7px;
padding-bottom:7px;
opacity:1;
}
.menuitemtop *{
margin:2px 2px 0 2px;
padding: 5px 10px 3px 5px;
border:transparent;
.toggletabs:checked:disabled {
background:@theme_base_color;
border-radius:0px;
color:@theme_text_color;
padding-top:7px;
padding-bottom:7px;
opacity:1;
}
.menuitemmiddle *{
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
.toggletabs:checked:disabled>* {
background:@theme_base_color;
color:@theme_text_color;
opacity:1;
}
.menuitembottom *{
margin:0 2px 2px 2px;
padding: 3px 10px 5px 5px;
.toggletabs:checked:active:disabled {
background:@theme_base_color;
border-radius:0px;
color:inherit;
padding-top:7px;
padding-bottom:7px;
opacity:1;
}
.menuitemtop:hover {
background:@theme_bg_color;
border-color:inherit;
border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
.toggletabs:disabled:active {
background-color: @theme_base_color;
border:none;
border-radius:0px;
transition:0;
padding-top:7px;
padding-bottom:7px;
color:black;
opacity:1;
}
.menuitemmiddle:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
.toggletabs:active {
background-color: @theme_base_color;
border:none;
border-radius:0px;
transition:0;
padding-top:7px;
padding-bottom:7px;
color:inherit;
opacity:1;
}
.menuitembottom:hover {
background:@theme_bg_color;
border-color:inherit;
border-bottom-width:0px;
border-left-width:inherit;
border-right-width:inherit;
.menubox {
background-color:@theme_text_color;
}
.menubox *{
color:@theme_base_color;
}
.bggrey{
border-radius:5px;
border-color:@theme_text_color;
border-style:solid;
border-width:0.3px;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.15);
}
.menuitemtop:hover* {
margin:2px 2px 0 2px;
padding: 5px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
.tag_red{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
color:#660000;
border-color: #cf2a27;
background-color:#ea9999
}
.menuitemmiddle:hover* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
.tag_blue{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
color:#073763;
border-color: #2b78e4;
background-color:#9fc5f8
}
.menuitembottom:hover* {
margin:0 2px 2px 2px;
padding: 3px 10px 5px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
.tag_purple{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
color:#073763;
border-color: #9900ff;
background-color:#b4a7d6
}
.tag_orange{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
color:#783f04;
border-color: #ff9900;
.workingbg, #workingbg {
background-color:@theme_base_color;
background-color:#f9cb9c
}
.tag_yellow{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
color:#7f6000;
border-color: #bf9000;
.workingbg.view.cell:selected {
background-color:@theme_selected_bg_color;
background-color:#ffe599
}
.tag_green{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
border-color: #009e0f;
background-color:#b6d7a8;
color:#274e13;
}
.tag_grey{
border-radius: 2px;
border-width: 0.5px;
border-style: solid;
padding:2px 5px;
color:#5f5f5f;
border-color: #777777;
.workingbg.view.cell:hover {
background-color:darker(@theme_selected_bg_color);
color:@theme_selected_text_color;
border-radius:3px;
background-color:#999999
}
.bkim {
transition: 200ms ease-out;
background-image: none;
.tableborderbottom {
border-bottom:0.5px;
border-style: solid;
border-color: @theme_fg_color;
}
button {
min-width: 26px;
min-height: 24px;
}
.unsensitiveblock:disabled {
opacity:1;
background:@theme_selected_bg_color;
}
.bannerbackground {
background-color: #404040;
}
.sharpborder {
border-radius: 0px;
}
.instant {
transition-duration: 0ms;
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save