From c9b36c023ccaa0af826274e316dd3bbe579b6529 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 21 Nov 2025 18:18:01 +0600 Subject: [PATCH] WIP settings manager rework --- gresource.xml | 1 + source/CMakeLists.txt | 2 + source/ubl-settings-manager-settings.c | 82 ++ source/ubl-settings-manager-theme-gnome.c | 91 +- source/ubl-settings-manager-theme.c | 18 +- source/ubl-settings-manager.c | 960 ++---------------- source/ubl-settings-manager.h | 145 +-- ubl-settings-manager-settings.glade | 206 ++-- ...settings-manager-theme-gnome-section.glade | 7 +- ubl-settings-manager-theme-gnome.glade | 37 +- ubl-settings-manager.glade | 261 +---- 11 files changed, 461 insertions(+), 1349 deletions(-) create mode 100644 source/ubl-settings-manager-settings.c diff --git a/gresource.xml b/gresource.xml index 87d8e0d..15ccfb7 100644 --- a/gresource.xml +++ b/gresource.xml @@ -2,6 +2,7 @@ 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 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 3c99c95..ffb5543 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -30,6 +30,7 @@ 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 @@ -69,6 +70,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin 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 diff --git a/source/ubl-settings-manager-settings.c b/source/ubl-settings-manager-settings.c new file mode 100644 index 0000000..07c10e0 --- /dev/null +++ b/source/ubl-settings-manager-settings.c @@ -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;iThemeCombo),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); + +} \ No newline at end of file diff --git a/source/ubl-settings-manager-theme-gnome.c b/source/ubl-settings-manager-theme-gnome.c index 4d8ceb3..16eee5a 100644 --- a/source/ubl-settings-manager-theme-gnome.c +++ b/source/ubl-settings-manager-theme-gnome.c @@ -1,19 +1,61 @@ #include "ubl-settings-manager.h" +typedef struct { + GtkWidget *expander; + GtkWidget *AppsList; + app_section *section; +} gnome_section; -void on_gnome_activate(){ +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_socket_add(){ +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); + } -typedef struct { - GtkWidget *expander; - GtkWidget *AppsList; - app_section *section; -} gnome_section; +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)); @@ -26,21 +68,32 @@ gnome_section *yon_gnome_section_new(){ void yon_gnome_section_setup_apps(gnome_section *cur_section, const char *target){ apps *cur_app = yon_apps_get((char*)target); - GtkWidget *Image = gtk_image_new_from_icon_name(cur_app->Icon,GTK_ICON_SIZE_BUTTON); + 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); - // g_signal_connect(G_OBJECT(theme->AppsTree),"row-activated",G_CALLBACK(on_gnome_activate),theme); - g_object_set_data(G_OBJECT(Row),"gnome_section",cur_section); + 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(GtkBox *target,app_section *section){ +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); @@ -49,7 +102,10 @@ void yon_gnome_section_setup(GtkBox *target,app_section *section){ for(int i=0;iexpander,0,0,0); + 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){ @@ -66,7 +122,7 @@ int yon_gnome_update(gnome_theme_struct *theme){ dictionary *cur; for_dictionaries(cur,main_config.sections){ app_section *section_data = yon_dictionary_get_data(cur,app_section*); - yon_gnome_section_setup(GTK_BOX(theme->AppsTree),section_data); + yon_gnome_section_setup(theme,section_data); } return 1; } @@ -80,11 +136,14 @@ gnome_theme_struct *yon_gnome_theme_new(){ 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->Socket = NULL; - theme->get_command_func = NULL; + 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; - theme->set_sections_func = NULL; + + 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); diff --git a/source/ubl-settings-manager-theme.c b/source/ubl-settings-manager-theme.c index a2c7ce3..4eee16f 100644 --- a/source/ubl-settings-manager-theme.c +++ b/source/ubl-settings-manager-theme.c @@ -6,7 +6,7 @@ theme_struct *yon_theme_update(main_window *widgets){ theme_id = yon_char_new(GNOME_THEME_LABEL); } - theme_struct *theme = g_hash_table_lookup(main_config.themes,theme_id); + 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; @@ -25,10 +25,14 @@ theme_struct *yon_theme_update(main_window *widgets){ } 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),gnome_struct); - g_hash_table_insert(main_config.themes,yon_char_new(MAIN_THEME_LABEL),main_struct); + // 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(){ @@ -40,14 +44,16 @@ void on_main_socket_add(){ } main_theme_struct *yon_main_theme_new(){ - main_theme_struct *theme = malloc(sizeof(gnome_theme_struct)); + 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); diff --git a/source/ubl-settings-manager.c b/source/ubl-settings-manager.c index 125f48f..2cee476 100644 --- a/source/ubl-settings-manager.c +++ b/source/ubl-settings-manager.c @@ -4,161 +4,6 @@ config main_config; -// void on_plug_added(GtkSocket* self, main_window *builder){ -// gtk_widget_show(builder->socketbutton); -// gtk_widget_show(builder->ThirdSocket); -// gtk_widget_set_vexpand(builder->HideWhileLaunch,0); -// gtk_widget_hide(builder->HideWhileLaunch); -// gtk_widget_set_vexpand(GTK_WIDGET(builder->socketplace),1); -// gtk_widget_set_vexpand(GTK_WIDGET(self),1); -// gtk_widget_show(builder->socketplace); -// gtk_widget_hide(builder->appSettings); -// if (builder->ButtonBackToMain!=NULL) gtk_widget_show(builder->ButtonBackToMain); -// gtk_widget_show(GTK_WIDGET(self)); -// gtk_widget_show(builder->socketbuttonplace); -// gtk_widget_show(builder->ThirdSocketPlace); -// gtk_widget_show(builder->socketbutton); -// gtk_widget_show(builder->ThirdSocket); -// } - -// void on_plug_removed(GtkSocket* self, main_window *widgets){ -// on_backToSettingsButton_clicked(widgets->ButtonBackToMain,widgets); -// gtk_widget_show(widgets->socketbuttonplace); -// gtk_widget_show(widgets->appSettings); -// gtk_widget_show(widgets->HideWhileLaunch); -// gtk_widget_set_vexpand(widgets->socketplace,0); -// gtk_widget_set_vexpand(widgets->HideWhileLaunch,1); -// } - -// void on_Item_activated(GtkIconView* self, GtkTreePath* path, main_window *applist){ -// GtkTreeIter iter; -// char *name; -// if (applist->socket){ -// gtk_widget_destroy(applist->socket); -// } -// applist->socket=create_socket(applist); -// gtk_tree_model_get_iter(gtk_icon_view_get_model(self),&iter,path); -// gtk_tree_model_get(gtk_icon_view_get_model(self),&iter,0,&name,-1); - -// apps *tempapp=get_app_by_name(applist->applist,name,applist->appssize); -// if (!tempapp){}else{ -// char *arg=NULL; -// arg=yon_char_get_augumented("--socket-id=",yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->socket)))); - -// if (tempapp[0].Type==1){ -// if (tempapp->Pluggable==1) -// if (tempapp->DualPluggable==1){ -// char *dualarg=NULL; -// dualarg=yon_char_get_augumented("--socket-id=",yon_char_get_augumented(yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->socket))),yon_char_get_augumented(" --socket-ext-id=",yon_char_get_augumented(yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->socketbutton))),yon_char_get_augumented(" --socket-trd-id=",yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->ThirdSocket)))))))); -// launch_app_with_arguments(tempapp[0].Exec,dualarg); -// } else -// launch_app_with_arguments(tempapp[0].Exec,arg); -// else launch_app(tempapp[0].Exec); -// } -// } -// }; - -// void on_gnome_Item_activated(GtkIconView* self, GtkTreePath* path, main_window *applist){ -// GtkTreeIter iter; -// char *name; -// if (applist->socket){ -// gtk_widget_destroy(applist->socket); -// } -// applist->socket=create_socket(applist); - -// gtk_tree_model_get_iter(gtk_icon_view_get_model(self),&iter,path); -// gtk_tree_model_get(gtk_icon_view_get_model(self),&iter,0,&name,-1); - -// apps *tempapp=get_app_by_name(applist->applist,name,applist->appssize); -// char *arg=NULL; -// arg=yon_char_get_augumented("--socket-id=",yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->socket)))); -// if (tempapp[0].Type==1){ -// if (tempapp->Pluggable==1){ - -// if (tempapp->DualPluggable==1){ -// char *dualarg=NULL; -// dualarg=yon_char_get_augumented("--socket-id=",yon_char_get_augumented(yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->socket))),yon_char_get_augumented(" --socket-ext-id=",yon_char_get_augumented(yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->socketbutton))),yon_char_get_augumented(" --socket-trd-id=",yon_char_from_int((int)gtk_socket_get_id(GTK_SOCKET(applist->ThirdSocket)))))))); -// if (launch_app_with_arguments(tempapp[0].Exec,dualarg)==32512) -// gtk_widget_show(applist->infoWarningWindow); -// } -// else{ -// launch_app_with_arguments(tempapp[0].Exec,arg); -// gtk_widget_destroy(applist->socketbutton); -// } -// } -// else { -// launch_app(tempapp[0].Exec); -// gtk_widget_destroy(applist->socketbutton); -// } -// } -// } - -// void on_item_selection_changed(GtkIconView *IV, main_window *widgets){ -// if (gtk_icon_view_get_selected_items(IV)>0){ -// dictionary *next=widgets->ICSys->first; -// for (dictionary *dct=next;dct!=NULL;dct=dct->next){ -// IVGraphicals *IVG=(IVGraphicals*)dct->data; -// if (GTK_ICON_VIEW(IVG->IV)!=GTK_ICON_VIEW(IV)) -// if (gtk_icon_view_get_selected_items(GTK_ICON_VIEW(IVG->IV))>0) -// gtk_icon_view_unselect_all(GTK_ICON_VIEW(IVG->IV)); -// } -// } -// }; -// void on_about_link(GtkWidget* self,gchar* uri,gpointer user_data){ -// gtk_widget_destroy(self); -// on_ButtonOpenHelp_activated(NULL,user_data); -// } -// void on_ButtonOpenHelp_activated(GtkWidget *button, GtkBuilder *builder){ -// if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,"AlwaysOpenHelpCheckbox")))) -// { -// #ifdef WEBKIT_FOUND -// GtkBuilder *web_builder=gtk_builder_new_from_resource(GladePath); -// GtkWidget *browser=GTK_WIDGET(gtk_builder_get_object(web_builder,"Web_Window")); -// GtkWidget *web_place=GTK_WIDGET(gtk_builder_get_object(web_builder,"Web_Place")); -// GtkWidget *WebView=webkit_web_view_new(); -// webkit_web_view_load_uri(WEBKIT_WEB_VIEW(WebView),UBLINUX_WIKI_LINK); -// gtk_box_pack_start(GTK_BOX(web_place),WebView,1,1,0); -// gtk_widget_show_all(browser); -// #else -// if(system(UBLINUX_WIKI_COMMAND)){}; -// #endif -// } else -// { -// GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder,"HelpSureWindow")); -// gtk_widget_show(window); -// }; -// }; - -// void on_backToSettingsButton_clicked(GtkWidget *button,main_window *sctb){ -// GtkWidget *window=GTK_WIDGET(gtk_builder_get_object(sctb->builder,"HideWhileLaunch")); -// GtkWidget *socketplace=GTK_WIDGET(gtk_builder_get_object(sctb->builder,"socketplace")); -// gtk_widget_destroy(sctb->socket); -// sctb->socket=NULL; -// GtkWidget *backbutton=sctb->ButtonBackToMain; -// gtk_widget_hide(backbutton); -// }; - -// void on_CancelHelpButton_activated(GtkWidget *button,GtkBuilder *builder){ -// GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder,"HelpSureWindow")); -// gtk_widget_hide(window); -// }; - -// void on_ReadHelpButton_activated(GtkWidget *button, GtkBuilder *builder){ -// #ifdef WEBKIT_FOUND -// GtkBuilder *web_builder=gtk_builder_new_from_resource(GladePath); -// GtkWidget *browser=GTK_WIDGET(gtk_builder_get_object(web_builder,"Web_Window")); -// GtkWidget *web_place=GTK_WIDGET(gtk_builder_get_object(web_builder,"Web_Place")); -// GtkWidget *WebView=webkit_web_view_new(); -// webkit_web_view_load_uri(WEBKIT_WEB_VIEW(WebView),UBLINUX_WIKI_LINK); -// gtk_box_pack_start(GTK_BOX(web_place),WebView,1,1,0); -// gtk_widget_show_all(browser); -// #else -// if(system(UBLINUX_WIKI_COMMAND)){}; -// #endif -// GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder,"HelpSureWindow")); -// gtk_widget_hide(window); -// }; - // int on_settings_accept(GtkWidget *button, dictionary **widgetsDs){ // if (main_config.WindowTheme==0) // main_config.curThemeName="Main"; @@ -260,84 +105,6 @@ config main_config; // gtk_widget_hide(widgets->SettingsWindow); // }; -// void on_paned_move(GtkPaned* self, GtkScrollType* scroll_type, main_window *widgets){ -// int position=gtk_paned_get_position(GTK_PANED(widgets->GnomePaned)); -// if (position<200) {position=200; gtk_paned_set_position(GTK_PANED(widgets->GnomePaned),200);} -// main_config.iconSegmentSize=position; -// double pos=((double)position-20); -// if (pos<50) pos=50; -// for (dictionary *dict=widgets->ICSys;dict!=NULL;dict=dict->next){ -// IVGraphicals *IV=(IVGraphicals*)dict->data; -// gtk_icon_view_set_item_width(GTK_ICON_VIEW(IV->IV),pos); -// } - - -// } - -// int on_settingsOpen(GtkWidget *button, main_window *widgets){ -// gtk_window_set_title(GTK_WINDOW(widgets->SettingsWindow),UBL_SETTINGS_MANAGER_TITLE); -// gtk_widget_set_size_request(widgets->SettingsWindow,400,250); -// GtkIconTheme *icthm=gtk_icon_theme_get_default(); -// gtk_window_set_icon(GTK_WINDOW(widgets->SettingsWindow),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(32),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_widget_show_all(widgets->SettingsWindow); -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->settingsThemeChooser),main_config.WindowTheme); -// gtk_switch_set_state(GTK_SWITCH(widgets->settingsDoubleClickSwitch),*main_config.currentDoubleClick); -// int sz=1; -// if (*main_config.currentThemeIconSize==64) sz=4; -// if (*main_config.currentThemeIconSize==48) sz=3; -// if (*main_config.currentThemeIconSize==32) sz=2; -// if (*main_config.currentThemeIconSize==24) sz=1; -// gtk_range_set_value(GTK_RANGE(widgets->settingsSizeSlider),sz); -// char *tmp=malloc(6); -// sprintf(tmp,"%dx%d\0",*main_config.currentThemeIconSize,*main_config.currentThemeIconSize); -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),tmp); -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(*main_config.currentThemeIconSize),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); - -// gtk_window_present(GTK_WINDOW(widgets->SettingsWindow)); -// }; - -// int on_settings_icon_size_changed(GtkWidget* self, main_window *widgets){ -// int val=(int)gtk_range_get_value(GTK_RANGE(self)); -// GtkIconTheme *icthm=gtk_icon_theme_get_default(); -// if ((int)val==1||(int)val==0){ -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(24),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"24x24"); -// if (*main_config.currentThemeIconSize!=24) -// main_config.changed=1; -// *main_config.currentThemeIconSize=24; -// } -// if ((int)val==2){ -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(32),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"32x32"); -// if (*main_config.currentThemeIconSize!=32) -// main_config.changed=1; -// *main_config.currentThemeIconSize=32; -// } -// if ((int)val==3){ -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(48),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"48x48"); -// if (*main_config.currentThemeIconSize!=48) -// main_config.changed=1; -// *main_config.currentThemeIconSize=48; -// } -// if ((int)val==4){ -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(64),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"64x64"); -// if (*main_config.currentThemeIconSize!=64) -// main_config.changed=1; -// *main_config.currentThemeIconSize=64; -// } -// }; - -// int on_settings_cancel(GtkWidget *button, main_window *widgets){ -// gtk_widget_hide(widgets->SettingsWindow); -// setup_config(); -// }; - -// void on_caution_understand(GtkWidget *button,main_window *widgets){ -// gtk_widget_hide(widgets->CautionWindow); -// } - // void on_section_settings_open(GtkButton* self,dictionary *cWidgets){ // main_window *widgets=(main_window*)cWidgets->data; // if (main_config.SettingsSections->first->data==NULL){ @@ -564,60 +331,19 @@ config main_config; // } - -// void on_theme_selection_changed(GtkWidget *self, main_window *widgets){ -// int *icsize; -// int curthm=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->settingsThemeChooser)); -// if (curthm==0){ -// main_config.currentThemeIconSize=&main_config.Mainiconsize; -// main_config.currentThemeLabelSize=&main_config.MainlabelSize; -// main_config.currentDoubleClick=&main_config.MainDoubleClick; -// icsize=main_config.currentThemeIconSize; -// } -// else if (curthm==1){ -// main_config.currentThemeIconSize=&main_config.Gnomeiconsize; -// main_config.currentThemeLabelSize=&main_config.GnomelabelSize; -// main_config.currentDoubleClick=&main_config.GnomeDoubleClick; -// icsize=main_config.currentThemeIconSize; -// } -// gtk_switch_set_state(GTK_SWITCH(widgets->settingsDoubleClickSwitch),*main_config.currentDoubleClick); -// GtkIconTheme *icthm=gtk_icon_theme_get_default(); -// if (*icsize==24 || *icsize==1){ -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"24x24"); -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(24),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_scale_set_value_pos(GTK_SCALE(widgets->settingsSizeSlider),1.0); -// *icsize=24; -// } else if (*icsize==32 || *icsize==2){ -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"32x32"); -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(32),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_scale_set_value_pos(GTK_SCALE(widgets->settingsSizeSlider),2.0); -// *icsize=32; -// } else if (*icsize==48 || *icsize==3){ -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"48x48"); -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(48),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_scale_set_value_pos(GTK_SCALE(widgets->settingsSizeSlider),3.0); -// *icsize=48; -// } else{ -// gtk_label_set_text(GTK_LABEL(widgets->settingsSizeInfoLabel),"64x64"); -// gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->settingsIcon),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, AppIconPath,yon_get_icon_size(64),1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); -// gtk_scale_set_value_pos(GTK_SCALE(widgets->settingsSizeSlider),4.0); -// *icsize=64; -// } -// } - void on_reveal_banner(GtkWidget *, main_window *widgets){ if (gtk_revealer_get_reveal_child(GTK_REVEALER(widgets->BannerRevealer))){ gtk_revealer_set_transition_type(GTK_REVEALER(widgets->BannerRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->BannerRevealer),0); gtk_menu_button_set_direction(GTK_MENU_BUTTON(widgets->BannerArrow),GTK_ARROW_RIGHT); int banner = 1; - yon_window_config_add_instant_parameter("HideBanner","Settings",&banner,YON_TYPE_BOOLEAN); + yon_window_config_add_instant_parameter(hide_banner_parameter,"Settings",&banner,YON_TYPE_BOOLEAN); } else { gtk_revealer_set_transition_type(GTK_REVEALER(widgets->BannerRevealer),GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->BannerRevealer),1); gtk_menu_button_set_direction(GTK_MENU_BUTTON(widgets->BannerArrow),GTK_ARROW_LEFT); int banner = 0; - yon_window_config_add_instant_parameter("HideBanner","Settings",&banner,YON_TYPE_BOOLEAN); + yon_window_config_add_instant_parameter(hide_banner_parameter,"Settings",&banner,YON_TYPE_BOOLEAN); } } @@ -626,51 +352,6 @@ void on_reveal_banner(GtkWidget *, main_window *widgets){ // update_double_clicks(widgetsD); // } -// void on_about(GtkWidget *button, GtkBuilder *buildr){ -// GtkBuilder *builder = gtk_builder_new_from_resource(GladePath); -// GtkWidget *AboutButtons = GTK_WIDGET(gtk_builder_get_object(builder,"AboutButtons")); -// GtkWidget *AboutHeadLabel = GTK_WIDGET(gtk_builder_get_object(builder,"aboutHeadLabel")); -// GtkWidget *About = GTK_WIDGET(gtk_builder_get_object(builder, "ublAbloutWindow")); -// gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(About),_(ABOUT_PROJECT_COMMENTS_LABEL)); -// gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(About),_(UBL_SETTINGS_MANAGER_TITLE)); -// gtk_label_set_text(GTK_LABEL(AboutHeadLabel),UBL_SETTINGS_MANAGER_ABOUT_TITLE); -// gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(About),version_application); -// gtk_widget_show(About); -// GList *list = gtk_container_get_children(GTK_CONTAINER(AboutButtons)); -// gtk_widget_destroy(AboutButtons); -// g_signal_connect(G_OBJECT(About), "activate-link", G_CALLBACK(on_about_link), buildr); -// gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(About),_(ABOUT_PROJECT_HOME_PAGE_LABEL)); -// } - -// int launch(thread_output *thread){ -// int a=0; -// a=system(thread->command); -// *thread->exitcode=a; -// return *thread->exitcode; -// } - -// int launch_app_with_arguments(char *name, char *args){ -// char *path=yon_char_get_augumented("/usr/bin/",name); -// path=yon_char_get_augumented(path," "); -// path=yon_char_get_augumented(path,args); -// pthread_t thread_id; -// thread_output *thread=malloc(sizeof(thread_output)); -// thread->command=path; -// thread->exitcode=malloc(sizeof(int)); -// pthread_create(&thread_id, NULL, (void*)launch, thread); -// return *thread->exitcode; -// }; - -// int launch_app(char *name){ -// char *path=name; -// thread_output *thread=malloc(sizeof(thread_output)); -// thread->command=path; -// thread->exitcode=malloc(sizeof(int)); -// pthread_t thread_id; -// pthread_create(&thread_id, NULL, (void*)launch, thread); -// return *thread->exitcode; -// }; - // int py_launch_app(char *name,char *args){ // char *path=malloc(strlen("python ./")+strlen(name)+6+strlen(args)); // sprintf(path,"python ./%s.py %s &",name,args); @@ -682,13 +363,6 @@ void on_reveal_banner(GtkWidget *, main_window *widgets){ // return *thread->exitcode; // }; -// apps *get_app_by_name(apps *applist,char *name, int size){ -// for (int i=0;iIV),GTK_TREE_MODEL(section->LV)); // } @@ -750,140 +424,7 @@ void on_reveal_banner(GtkWidget *, main_window *widgets){ // } // } -// GtkWidget *create_socket(main_window *builder){ -// GtkWidget *socket; -// socket = gtk_socket_new(); -// GtkWidget *socketbutton=gtk_socket_new(); -// GtkWidget *ThirdSocket=gtk_socket_new(); -// g_signal_connect(G_OBJECT(socket),"plug-added",G_CALLBACK(on_plug_added),builder); -// g_signal_connect(G_OBJECT(socket),"plug-removed",G_CALLBACK(on_plug_removed),builder); -// g_signal_connect(G_OBJECT(socket),"destroy",G_CALLBACK(on_plug_removed),builder); -// gtk_box_pack_start(GTK_BOX(builder->socketplace),socket,true,true,0); -// gtk_box_pack_start(GTK_BOX(builder->socketbuttonplace),socketbutton,1,1,0); -// builder->socketbutton=socketbutton; -// gtk_box_pack_start(GTK_BOX(builder->ThirdSocketPlace),ThirdSocket,1,1,0); -// builder->ThirdSocket=ThirdSocket; -// return socket; -// }; - -// void sort_apps(apps *applist,int size){ -// apps tmp; -// if (size>2) -// { -// for (int i=1;id_name); -// file=fopen(path,"r"); -// if (strlen(de->d_name)>9) -// { -// char *extension=strstr(path,"."); -// if (extension!=NULL) -// { -// if (strcmp(extension,".desktop")==0) -// { -// apps tempapp; -// GKeyFile *gfile=g_key_file_new(); -// g_key_file_load_from_file(gfile,path,G_KEY_FILE_KEEP_TRANSLATIONS,NULL); -// char *Type=g_key_file_get_string(gfile,"Desktop Entry", "Type",NULL); -// if (strcmp(Type,"Application")==0) tempapp.Type=1; else if (strcmp(Type,"pyApplication")==0) tempapp.Type=2; else continue; -// tempapp.Name=g_key_file_get_locale_string(gfile,"Desktop Entry","Name",setlocale(LC_ALL,NULL),NULL); -// if (tempapp.Name==NULL) continue; -// tempapp.Categories=g_key_file_get_string(gfile,"Desktop Entry", "Categories",NULL); -// if (tempapp.Categories==NULL) continue; -// tempapp.Exec=g_key_file_get_string(gfile,"Desktop Entry", "Exec",NULL); -// if (tempapp.Exec==NULL) continue; -// tempapp.Icon=g_key_file_get_string(gfile,"Desktop Entry", "Icon",NULL); -// if (tempapp.Icon==NULL) continue; -// tempapp.Pluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "Pluggable",NULL); -// if (!tempapp.Pluggable) tempapp.Pluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "X-XfcePluggable",NULL); -// if (tempapp.Pluggable) tempapp.DualPluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "X-UBLPluggable",NULL); -// if (g_key_file_get_boolean(gfile,"Desktop Entry", "X-UBL-SettingsManager-Hidden",NULL)==0) -// if (size==0){ -// applist=(apps*)malloc(size+1*sizeof(apps)); -// applist[0].Name=yon_char_new(tempapp.Name); -// applist[0].Categories=yon_char_new(tempapp.Categories); -// applist[0].Exec=yon_char_new(tempapp.Exec); -// applist[0].Icon=yon_char_new(tempapp.Icon); -// applist[0].Type=tempapp.Type; -// applist[0].Pluggable=tempapp.Pluggable; -// applist[0].DualPluggable=tempapp.DualPluggable; -// size++; -// } else { -// applist=(apps*)realloc(applist,(size+1)*sizeof(apps)); -// applist[size].Name=yon_char_new(tempapp.Name); -// applist[size].Categories=yon_char_new(tempapp.Categories); -// applist[size].Exec=yon_char_new(tempapp.Exec); -// applist[size].Icon=yon_char_new(tempapp.Icon); -// applist[size].Pluggable=tempapp.Pluggable; -// applist[size].DualPluggable=tempapp.DualPluggable; -// applist[size].Type=tempapp.Type; -// size++; -// } -// } -// } -// } -// } -// } -// *sizef=size; -// return applist; -// }; -// int check_categories(apps app, char *catstocheck){ -// if (!catstocheck || strcmp(catstocheck,"")==0||strcmp(catstocheck,";")==0){ -// char *found=strstr(app.Categories,"X-UBL-SettingsManager"); -// char *perfound=strstr(app.Categories,"X-UBL-PersonalSettings"); -// char *harfound=strstr(app.Categories,"X-UBL-HardwareSettings"); -// char *sysfound=strstr(app.Categories,"X-UBL-SystemSettings"); -// if (found!=NULL&&(perfound==NULL&&harfound==NULL&&sysfound==NULL)) return 1; -// else if (found==NULL)return 0; -// } else -// { -// char *left_cats=catstocheck; -// char *cat=strstr(left_cats,";"); -// if (!cat) return 0; -// char *find_it=yon_cut(left_cats,(strlen(left_cats)-strlen(cat)),0); -// char *found=strstr(app.Categories,find_it); -// int to_find=0, n_found=0; -// to_find++; -// if (!found) return 0; -// n_found++; -// while (cat){ -// left_cats=cat+1; -// char *fcat=app.Categories; -// cat=strstr(cat+1,";"); -// if (!cat) break; -// find_it=yon_cut(left_cats,(strlen(left_cats)-strlen(cat)),0); -// char *found=strstr(app.Categories,find_it); -// to_find++; -// if (!found) break; -// n_found++; -// left_cats=cat+1; -// if (strlen(left_cats)==0 ||strcmp(left_cats,"")==0) break; -// } -// if (to_find==n_found) return 1; else return 0; -// } -// }; void config_init(){ main_config.sections=NULL; @@ -895,426 +436,96 @@ void config_init(){ yon_theme_init(); }; -// // void save_config(main_window *widgets){ -// // if (main_config.lock_settings==1) -// // return; -// // GKeyFile *gfile=g_key_file_new(); -// // int sz=1,szm=1; -// // if (main_config.Gnomeiconsize==64) sz=4; -// // else if (main_config.Gnomeiconsize==48) sz=3; -// // else if (main_config.Gnomeiconsize==32) sz=2; -// // else if (main_config.Gnomeiconsize==24) sz=1; -// // else sz=3; -// // if (main_config.Mainiconsize==64) szm=4; -// // else if (main_config.Mainiconsize==48) szm=3; -// // else if (main_config.Mainiconsize==32) szm=2; -// // else if (main_config.Mainiconsize==24) szm=1; -// // else szm=3; -// // char *fromint=malloc(5); -// // memset(fromint,0,5); -// // GError *err=NULL; -// // char *login=getlogin(); -// // if (geteuid()==0){ -// // login=main_config.lastUser; -// // } else { -// // main_config.lastUser=login; -// // } -// // char *pth=malloc(7+strlen(UserConfigPath)+strlen(getlogin())); -// // sprintf(pth,"%s%s%s","/home/",getlogin(),UserConfigPath); -// // g_key_file_load_from_file(gfile,pth,G_KEY_FILE_NONE,&err); -// // if (err){ -// // struct stat st = {0}; -// // char *ptdir=malloc(36+strlen(getlogin())); -// // sprintf(ptdir,"%s%s%s","/home/",getlogin(),"/.config/ubl-settings-manager"); -// // if (stat(ptdir, &st) == -1) { -// // mkdir(ptdir, 0777); -// // } -// // FILE *fp; -// // fp=fopen(pth,"w"); -// // fclose(fp); -// // } -// // g_key_file_load_from_file(gfile,pth,G_KEY_FILE_NONE,&err); -// // if (main_config.fullscreen==0){ -// // sprintf(fromint,"%d",main_config.windowPosX); -// // g_key_file_set_string(gfile,"window","WindowPosX",fromint); -// // sprintf(fromint,"%d",main_config.windowPosY); -// // g_key_file_set_string(gfile,"window","WindowPosY",fromint); -// // sprintf(fromint,"%d",main_config.windowWidth); -// // g_key_file_set_string(gfile,"window","WindowWidth",fromint); -// // sprintf(fromint,"%d",main_config.windowHeight); -// // g_key_file_set_string(gfile,"window","WindowHeight",fromint); -// // } -// // g_key_file_set_boolean(gfile,"window","fullscreen",main_config.fullscreen); -// // g_key_file_set_boolean(gfile,"window","BannerHidden",main_config.BannerHidden); -// // g_key_file_set_boolean(gfile,"window","MainDoubleClick",main_config.MainDoubleClick); -// // g_key_file_set_boolean(gfile,"window","GnomeDoubleClick",main_config.GnomeDoubleClick); -// // sprintf(fromint,"%d",main_config.WindowTheme); -// // g_key_file_set_string(gfile,"window","WindowTheme",fromint); -// // sprintf(fromint,"%d",sz); -// // g_key_file_set_string(gfile,"window","GnomeIconSize",fromint); -// // sprintf(fromint,"%d",szm); -// // g_key_file_set_string(gfile,"window","MainIconSize",fromint); -// // sprintf(fromint,"%d",main_config.iconSegmentSize); -// // g_key_file_set_string(gfile,"window","IconSegmentSize",fromint); -// // sprintf(fromint,"%d",(int)((float)main_config.GnomelabelSize/1000)); -// // g_key_file_set_string(gfile,"window","GnomeLabelSize",fromint); -// // sprintf(fromint,"%d",(int)((float)main_config.MainlabelSize/1000)); -// // g_key_file_set_string(gfile,"window","MainLabelSize",fromint); -// // sprintf(fromint,"%d",(int)((float)main_config.labelDensity/1000)); -// // g_key_file_set_string(gfile,"window","LabelDensity",fromint); -// // g_key_file_set_string(gfile,"window","User",login); -// // if (main_config.lock_settings==0) -// // g_key_file_save_to_file(gfile,pth,NULL); -// // } - -// void yon_set_default_sections(dictionary *section){ -// yon_section_new(section,"Personal","X-UBL-SettingsManager;X-UBL-PersonalSettings;"); -// yon_section_new(section,"Hardware","X-UBL-SettingsManager;X-UBL-HardwareSettings;"); -// yon_section_new(section,"System","X-UBL-SettingsManager;X-UBL-SystemSettings;"); -// yon_section_new(section,"Misc",""); -// } - -// IVGraphicals *yon_create_single_section_IV(char *name,char *cats){ -// IVGraphicals *IVG = malloc(sizeof(IVGraphicals)); -// GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); -// GtkBuilder *builder = gtk_builder_new_from_resource(GladePath); -// GtkWidget *iv = GTK_WIDGET(gtk_builder_get_object(builder,"iconTemplate")); -// gtk_widget_show(iv); -// GtkWidget *label = gtk_label_new(_(name)); -// GtkCellRendererPixbuf *iconRender = GTK_CELL_RENDERER_PIXBUF(gtk_builder_get_object(builder, "iconPic")); -// PangoAttrList *attrs = pango_attr_list_new(); -// PangoFontDescription *descr = pango_font_description_new(); -// pango_font_description_set_weight(descr,PANGO_WEIGHT_BOLD); -// int stretch = main_config.labelDensity; -// if (stretch>8) -// stretch = 4; -// pango_font_description_set_stretch(descr,main_config.labelDensity); -// pango_attr_list_insert(attrs,pango_attr_size_new(*main_config.currentThemeLabelSize)); -// pango_attr_list_insert(attrs, pango_attr_font_desc_new(descr)); -// gtk_label_set_attributes(GTK_LABEL(label),attrs); -// gtk_widget_set_margin_end(label,6); -// gtk_widget_set_margin_start(label,6); -// gtk_widget_set_margin_bottom(label,2); -// gtk_icon_view_set_spacing(GTK_ICON_VIEW(iv),20); -// if (main_config.WindowTheme==1) { -// gtk_icon_view_set_columns(GTK_ICON_VIEW(iv),1); -// gtk_widget_set_name(iv,"GnomeIcon"); -// gtk_icon_view_set_activate_on_single_click(GTK_ICON_VIEW(iv),!main_config.GnomeDoubleClick); -// gtk_icon_view_set_item_orientation(GTK_ICON_VIEW(iv),GTK_ORIENTATION_HORIZONTAL); -// } else { -// gtk_icon_view_set_item_padding(GTK_ICON_VIEW(iv),3); -// gtk_icon_view_set_item_orientation(GTK_ICON_VIEW(iv),GTK_ORIENTATION_HORIZONTAL); -// gtk_icon_view_set_activate_on_single_click(GTK_ICON_VIEW(iv),!main_config.MainDoubleClick); -// gtk_icon_view_set_row_spacing(GTK_ICON_VIEW(iv),2); -// } -// GtkWidget *sep=gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); -// GtkListStore *lv=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststoreTemplate")); -// gtk_widget_set_name(sep,"SepIcon"); -// gtk_widget_set_halign(box,0); -// gtk_widget_set_valign(box,1); -// gtk_widget_set_margin_end(sep,6); -// gtk_widget_set_margin_start(sep,6); -// gtk_icon_view_set_model(GTK_ICON_VIEW(iv),GTK_TREE_MODEL(lv)); -// gtk_label_set_xalign(GTK_LABEL(label),0); -// gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,0); -// gtk_box_pack_start(GTK_BOX(box),sep,FALSE,FALSE,0); -// gtk_box_pack_start(GTK_BOX(box),iv,FALSE,FALSE,0); -// IVG->sectionName=name; -// IVG->categories=cats; -// IVG->LV = lv; -// IVG->Box = box; -// IVG->IV = iv; -// IVG->label = label; -// IVG->sep = sep; -// IVG->iconRender = iconRender; -// return IVG; -// } - -// dictionary *yon_create_icon_section_list(dictionary *sections){ -// if (!sections) -// return NULL; -// IVGraphicals *IVSections; -// dictionary *IVDict=NULL; -// sections=sections->first; -// while (sections!=NULL){ -// IconSection *name=(IconSection*)sections->data; -// IVSections=yon_create_single_section_IV(name->section,name->categories); -// if (!IVDict) { -// IVDict=yon_dictionary_create_empty(); -// IVDict->key=name->section; -// IVDict->data=IVSections; -// IVDict->first=IVDict; -// } else { -// IVDict=yon_dictionary_create_conneced(IVDict); -// IVDict->key=name->section; -// IVDict->data=IVSections; -// } -// sections=sections->next; -// } -// IVDict->next=NULL; -// return IVDict->first; -// } - -// void yon_check_path(char *path){ -// FILE *fp; -// char *pth=malloc(255); -// memset(path,0,255); -// fp = popen("screenfetch -n -w -N", "r"); -// fgets(pth, 255,fp)!=NULL; -// } - -// dictionary *yon_section_new(dictionary *section, char *section_name, char *categories){ -// IconSection *sct=malloc(sizeof(IconSection)); -// sct->section=section_name; -// sct->categories=categories; -// if (!section->data&&!section->prev){ -// section->data=sct; -// section->first=section; -// section->key=section_name; -// } else { -// section=yon_dictionary_get_last(section); -// section->next=yon_dictionary_create_conneced(section); -// section->next->data=sct; -// section->next->key=section_name; -// section=section->next; -// } - -// return section; -// } - -// void yon_icv_resize_item(dictionary *icdict, GtkWidget *paned){ -// for (dictionary *dict=icdict->first;dict!=NULL;dict=dict->next){ -// IVGraphicals *icv=(IVGraphicals*)dict->data; -// int width=gtk_paned_get_position(GTK_PANED(paned)); -// int pos=(int)((double)width-20); -// if (pos < 100) pos=100; - -// gtk_icon_view_set_item_width(GTK_ICON_VIEW(icv->IV),pos); -// } -// } - -// int yon_show_icon_views(dictionary *IVS,main_window *widgets){ -// for (dictionary *dct=IVS->first;dct!=NULL;dct=dct->next){ -// IVGraphicals *iv=dct->data; -// gtk_widget_show_all(iv->Box); -// gtk_box_pack_start(GTK_BOX(widgets->icvpack),iv->Box,FALSE,FALSE,0); -// if (main_config.WindowTheme==0) -// g_signal_connect(G_OBJECT(iv->IV),"item-activated",G_CALLBACK(on_Item_activated),widgets); -// else if (main_config.WindowTheme==1) -// g_signal_connect(G_OBJECT(iv->IV),"item-activated",G_CALLBACK(on_gnome_Item_activated),widgets); -// g_signal_connect(G_OBJECT(iv->IV),"selection-changed",G_CALLBACK(on_item_selection_changed),widgets); - -// } -// } - -// void yon_switch_theme(dictionary **dict, dictionary *newone){ -// dictionary *dct=*dict; -// main_window *widgets=(main_window*)dct->data; - -// gtk_widget_hide(widgets->window); -// *dict=newone; -// dct=*dict; -// widgets=(main_window*)dct->data; -// gtk_window_resize(GTK_WINDOW(widgets->window),main_config.windowWidth,main_config.windowHeight); -// gtk_window_move(GTK_WINDOW(widgets->window),main_config.windowPosX,main_config.windowPosY); -// if (strcmp(dct->key,"Gnome")==0){ -// main_config.currentThemeIconSize=&main_config.Gnomeiconsize; -// main_config.currentThemeLabelSize=&main_config.GnomelabelSize; -// int x,y; -// GdkRectangle workarea; -// gdk_monitor_get_workarea(gdk_display_get_monitor(gdk_screen_get_display(gtk_window_get_screen(GTK_WINDOW(widgets->window))),0),&workarea); -// gtk_window_get_size(GTK_WINDOW(widgets->window),&x, &y); -// if (workarea.width<1240&&workarea.height<720){ -// gtk_widget_show(widgets->CautionWindow); -// dictionary *founddict=yon_dictionary_find(dict,"Main"); -// dct=yon_dictionary_find(dict,"Gnome"); -// yon_switch_theme(&dct,founddict); -// gtk_window_resize(GTK_WINDOW(widgets->window),main_config.windowWidth,main_config.windowHeight); -// gtk_window_move(GTK_WINDOW(widgets->window),main_config.windowPosX,main_config.windowPosY); -// main_config.WindowTheme=0; -// main_config.curThemeName="Main"; -// gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->settingsThemeChooser),0); -// gtk_window_present(GTK_WINDOW(widgets->CautionWindow)); -// }else{ -// main_config.WindowTheme=1; -// main_config.curThemeName="Gnome"; -// gtk_widget_show(widgets->window); -// gtk_widget_hide(widgets->MenuItemAboutSystem); -// } - -// } else { -// main_config.currentThemeIconSize=&main_config.Mainiconsize; -// main_config.currentThemeLabelSize=&main_config.MainlabelSize; -// gtk_widget_show(widgets->window); -// main_config.WindowTheme=0; -// main_config.curThemeName="Main"; -// gtk_widget_show(widgets->MenuItemAboutSystem); -// } - - -// } - -// int yon_get_icon_size(int size){ -// if (size==1||size==24) return 24; -// if (size==2||size==32) return 32; -// if (size==3||size==48) return 48; -// if (size==4||size==64) return 64; -// } - -// void yon_icon_size_convert(int mode){ -// if (mode==0){ -// if (*main_config.currentThemeIconSize==1) *main_config.currentThemeIconSize=24; -// if (*main_config.currentThemeIconSize==2) *main_config.currentThemeIconSize=32; -// if (*main_config.currentThemeIconSize==3) *main_config.currentThemeIconSize=48; -// if (*main_config.currentThemeIconSize==4) *main_config.currentThemeIconSize=64; -// } else if (mode==1){ -// if (*main_config.currentThemeIconSize==24) *main_config.currentThemeIconSize=1; -// if (*main_config.currentThemeIconSize==32) *main_config.currentThemeIconSize=2; -// if (*main_config.currentThemeIconSize==48) *main_config.currentThemeIconSize=3; -// if (*main_config.currentThemeIconSize==64) *main_config.currentThemeIconSize=4; -// } -// } - -// SectionSettingSegment *yon_create_section_setting(char *name, char *categories){ -// SectionSettingSegment *segment=malloc(sizeof(SectionSettingSegment)); -// segment->MainFrame=gtk_frame_new(NULL); -// gtk_frame_set_shadow_type(GTK_FRAME(segment->MainFrame),GTK_SHADOW_IN); -// segment->MainBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// segment->ElemBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// gtk_widget_set_size_request(segment->ElemBox,0,20); -// segment->DragButtonBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// gtk_widget_set_name(segment->DragButtonBox,"noborders"); -// segment->DragUpButton=gtk_button_new_from_icon_name("go-top-symbolic",GTK_ICON_SIZE_BUTTON); -// segment->DragDownButton=gtk_button_new_from_icon_name("go-bottom-symbolic",GTK_ICON_SIZE_BUTTON); -// segment->NameBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// segment->CategoriesBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// segment->OptionBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// segment->NameEntry=gtk_entry_new(); -// gtk_entry_set_text(GTK_ENTRY(segment->NameEntry),name); -// segment->NameLabel=gtk_label_new(name); -// segment->CategoriesEntry=gtk_entry_new(); -// if (categories[strlen(categories)-1]!=';'){ -// categories=yon_char_get_augumented(categories,";"); -// } -// gtk_entry_set_text(GTK_ENTRY(segment->CategoriesEntry),categories); -// segment->CategoriesLabel=gtk_label_new(categories); -// segment->EditButtonBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// segment->EditButtonAccept=gtk_button_new_from_icon_name("emblem-ok-symbolic",GTK_ICON_SIZE_BUTTON); -// segment->EditButtonCancel=gtk_button_new_from_icon_name("process-stop-symbolic",GTK_ICON_SIZE_BUTTON); -// segment->ButtonEdit=gtk_button_new_from_icon_name("document-edit-symbolic",GTK_ICON_SIZE_BUTTON); -// segment->DeleditBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); -// segment->ButtonDelete=gtk_button_new_from_icon_name("edit-delete-symbolic",GTK_ICON_SIZE_BUTTON); - -// gtk_widget_set_name(segment->NameLabel,"SegName"); -// gtk_widget_set_name(segment->CategoriesLabel,"SegCat"); - -// gtk_container_add(GTK_CONTAINER(segment->MainFrame),segment->MainBox); - -// gtk_box_pack_start(GTK_BOX(segment->MainBox),segment->DragButtonBox,FALSE,FALSE,0); -// gtk_box_pack_start(GTK_BOX(segment->MainBox),segment->ElemBox,TRUE,TRUE,0); - -// gtk_box_pack_start(GTK_BOX(segment->DragButtonBox),segment->DragUpButton,FALSE,FALSE,0); -// gtk_box_pack_start(GTK_BOX(segment->DragButtonBox),segment->DragDownButton,FALSE,FALSE,0); - -// gtk_box_pack_start(GTK_BOX(segment->ElemBox),segment->NameBox,FALSE,FALSE,0); -// gtk_box_pack_end(GTK_BOX(segment->ElemBox),segment->CategoriesBox,FALSE,FALSE,0); +void yon_config_update(){ + if (!yon_window_config_get_parameter("Setings",double_click_parameter,&main_config.double_click,YON_TYPE_INT)){ + main_config.double_click=0; -// gtk_box_pack_start(GTK_BOX(segment->MainBox),segment->OptionBox,FALSE,FALSE,0); - -// gtk_box_pack_start(GTK_BOX(segment->NameBox),segment->NameEntry,FALSE,FALSE,5); -// gtk_box_pack_start(GTK_BOX(segment->NameBox),segment->NameLabel,FALSE,FALSE,5); - -// gtk_box_pack_start(GTK_BOX(segment->CategoriesBox),segment->CategoriesEntry,FALSE,FALSE,5); -// gtk_box_pack_start(GTK_BOX(segment->CategoriesBox),segment->CategoriesLabel,FALSE,FALSE,5); + } + if (!yon_window_config_get_parameter("Setings",icon_size_parameter,&main_config.apps_icon_size,YON_TYPE_INT)){ + main_config.apps_icon_size=24; + } +} -// gtk_box_pack_start(GTK_BOX(segment->EditButtonBox),segment->EditButtonAccept,FALSE,FALSE,5); -// gtk_box_pack_start(GTK_BOX(segment->EditButtonBox),segment->EditButtonCancel,FALSE,FALSE,5); - -// gtk_box_pack_start(GTK_BOX(segment->DeleditBox),segment->ButtonEdit,FALSE,FALSE,5); -// gtk_box_pack_start(GTK_BOX(segment->DeleditBox),segment->ButtonDelete,FALSE,FALSE,5); +int yon_char_parsed_compare(const void *a, const void *b){ + const config_str str_a = (const config_str)a; + const config_str str_b = (const config_str)b; -// gtk_box_pack_start(GTK_BOX(segment->OptionBox),segment->DeleditBox,FALSE,FALSE,0); -// gtk_box_pack_start(GTK_BOX(segment->OptionBox),segment->EditButtonBox,FALSE,FALSE,0); - -// gtk_widget_set_size_request(segment->NameLabel,60,10); - -// gtk_widget_set_margin_start(segment->DragButtonBox,5); -// gtk_widget_set_margin_end(segment->OptionBox,5); -// gtk_widget_set_margin_bottom(segment->MainFrame,3); -// gtk_widget_set_margin_bottom(segment->DragButtonBox,3); -// gtk_widget_set_margin_top(segment->DragButtonBox,3); -// gtk_widget_set_margin_end(segment->DragUpButton,3); - -// gtk_widget_set_halign(segment->NameEntry,GTK_ALIGN_START); -// gtk_widget_set_halign(segment->NameLabel,GTK_ALIGN_END); -// gtk_widget_set_valign(segment->OptionBox,GTK_ALIGN_CENTER); -// gtk_widget_set_valign(segment->OptionBox,GTK_ALIGN_CENTER); + return strcmp(*str_a,*str_b); +} -// gtk_widget_set_valign(segment->OptionBox,GTK_ALIGN_CENTER); -// gtk_widget_set_valign(segment->ElemBox,GTK_ALIGN_CENTER); -// gtk_label_set_xalign(GTK_LABEL(segment->NameLabel),0); -// gtk_label_set_xalign(GTK_LABEL(segment->CategoriesLabel),0); - -// gtk_widget_set_vexpand(segment->ElemBox,0); -// gtk_widget_set_vexpand(segment->NameBox,0); -// gtk_widget_set_vexpand(segment->CategoriesBox,0); -// gtk_widget_set_vexpand(segment->NameEntry,0); -// gtk_widget_set_vexpand(segment->NameLabel,0); -// gtk_widget_set_vexpand(segment->CategoriesEntry,0); -// gtk_widget_set_vexpand(segment->CategoriesLabel,0); -// gtk_widget_show_all(segment->MainFrame); -// gtk_widget_hide(segment->NameEntry); -// gtk_widget_hide(segment->CategoriesEntry); -// gtk_widget_hide(segment->EditButtonBox); -// return segment; -// } +void on_back_clicked(GtkWidget *, GtkWidget *socket){ + gtk_widget_destroy(socket); +} -// void yon_segment_show(main_window *widgets, SectionSettingSegment *sgm){ -// gtk_box_pack_start(GTK_BOX(widgets->SectionSettingsPack),sgm->MainFrame,FALSE,FALSE,5); -// g_signal_connect(G_OBJECT(sgm->ButtonEdit),"clicked",G_CALLBACK(on_sections_edit), widgets); -// g_signal_connect(G_OBJECT(sgm->EditButtonAccept),"clicked",G_CALLBACK(on_sections_accept), widgets); -// g_signal_connect(G_OBJECT(sgm->EditButtonCancel),"clicked",G_CALLBACK(on_sections_cancel), widgets); -// g_signal_connect(G_OBJECT(sgm->DragUpButton),"clicked",G_CALLBACK(on_sections_move_up), widgets); -// g_signal_connect(G_OBJECT(sgm->DragDownButton),"clicked",G_CALLBACK(on_sections_move_down), widgets); -// g_signal_connect(G_OBJECT(sgm->ButtonDelete),"clicked",G_CALLBACK(on_section_delete), widgets); - -// } +void on_plug_connected(GtkSocket *self, main_window *widgets){ + gtk_widget_show(widgets->BackButton); + gtk_widget_hide(widgets->SettingsButton); + g_signal_connect(G_OBJECT(widgets->BackButton),"clicked",G_CALLBACK(on_back_clicked),self); +} -// void yon_segments_show(main_window *widgets){ -// if(widgets->SettingsSections) -// for (dictionary *dict=widgets->SettingsSections->first;dict!=NULL;dict=dict->next){ -// SectionSettingSegment *sgm=(SectionSettingSegment*)dict->data; -// if (sgm!=NULL) +void on_plug_disconnected(GtkSocket *self, main_window *widgets){ + gtk_widget_hide(widgets->BackButton); + gtk_widget_show(widgets->SettingsButton); + g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->BackButton),G_CALLBACK(on_back_clicked),self); +} -// gtk_box_pack_start(GTK_BOX(widgets->SectionSettingsPack),sgm->MainFrame,FALSE,FALSE,5); -// else return; -// } -// }; +GtkSocket *yon_sockets_init(GtkBox *socketBox){ + GtkWidget *main_socket = NULL; + GList *list = gtk_container_get_children(GTK_CONTAINER(main_config.widgets->SaveSocketBox)); + if (list){ + gtk_widget_destroy(list->data); + g_list_free(list); + } + list = gtk_container_get_children(GTK_CONTAINER(main_config.widgets->LoadSocketBox)); + if (list){ + gtk_widget_destroy(list->data); + g_list_free(list); + } + list = gtk_container_get_children(GTK_CONTAINER(socketBox)); + if (list){ + gtk_widget_destroy(list->data); + g_list_free(list); + } + main_socket = gtk_socket_new(); + main_config.widgets->SaveSocket = gtk_socket_new(); + main_config.widgets->LoadSocket = gtk_socket_new(); + gtk_widget_show(main_config.widgets->SaveSocket); + gtk_widget_show(main_config.widgets->LoadSocket); + gtk_widget_show(main_socket); + gtk_box_pack_start(GTK_BOX(socketBox),main_socket,1,1,0); + gtk_box_pack_start(GTK_BOX(main_config.widgets->SaveSocketBox),main_config.widgets->SaveSocket,0,0,0); + gtk_box_pack_start(GTK_BOX(main_config.widgets->LoadSocketBox),main_config.widgets->LoadSocket,0,0,0); + + g_signal_connect(G_OBJECT(main_socket),"plug_added",G_CALLBACK(on_plug_connected),main_config.widgets); + g_signal_connect(G_OBJECT(main_socket),"destroy",G_CALLBACK(on_plug_disconnected),main_config.widgets); + return GTK_SOCKET(main_socket); +} -// void yon_segments_hide(main_window *widgets){ -// if(main_config.SettingsSections) -// for (dictionary *dict=main_config.SettingsSections->first;dict!=NULL;dict=dict->next){ -// SectionSettingSegment *sgm=(SectionSettingSegment*)dict->data; -// if (sgm!=NULL){ -// g_object_ref(G_OBJECT(sgm->MainFrame)); -// gtk_container_remove(GTK_CONTAINER(widgets->SectionSettingsPack),sgm->MainFrame); -// } else return; -// } -// } +char *yon_get_save_socket(){ + long socket_id = (guint)gtk_socket_get_id(GTK_SOCKET(main_config.widgets->SaveSocket)); + if (socket_id){ + return yon_char_from_long(socket_id); + } + return NULL; +} -// void yon_main_quit(GtkWidget *,GdkEvent*,main_window *widgets){ -// if (widgets->socket){ -// g_signal_handlers_disconnect_by_func(widgets->socket,on_plug_removed,widgets); -// } -// gtk_main_quit(); -// } +char *yon_get_load_socket(){ + long socket_id = (guint)gtk_socket_get_id(GTK_SOCKET(main_config.widgets->LoadSocket)); + if (socket_id){ + return yon_char_from_long(socket_id); + } + return NULL; +} void confugure_setings_window(main_window *widgets){ } void yon_interface_update(main_window *widgets){ - if (main_config.sections) yon_dictionary_free_all(main_config.sections,free); + if (main_config.sections) { + yon_dictionary_free_all(main_config.sections,free); + main_config.sections = NULL; + } gsize size; config_str section_settings = yon_window_config_get_section("Sections",&size); @@ -1354,11 +565,16 @@ void yon_interface_update(main_window *widgets){ yon_dictionary_add_or_create_if_exists_with_data(main_config.sections,cur_section->name,cur_section); } } + + widgets->current_theme = yon_theme_update(widgets); + + widgets->current_theme->list_update_func(widgets->current_theme); } main_window *yon_main_window_setup(){ main_window *widgets = malloc(sizeof(main_window)); + main_config.widgets=widgets; GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); @@ -1366,14 +582,22 @@ main_window *yon_main_window_setup(){ widgets->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel"); widgets->ThemeBox = yon_gtk_builder_get_widget(builder,"ThemeBox"); widgets->SocketBox = yon_gtk_builder_get_widget(builder,"SocketBox"); + widgets->BackButton = yon_gtk_builder_get_widget(builder,"BackButton"); widgets->SettingsButton = yon_gtk_builder_get_widget(builder,"SettingsButton"); widgets->BannerImage = yon_gtk_builder_get_widget(builder,"BannerImage"); widgets->BannerRevealer = yon_gtk_builder_get_widget(builder,"BannerRevealer"); widgets->BannerButton = yon_gtk_builder_get_widget(builder,"BannerButton"); widgets->BannerArrow = yon_gtk_builder_get_widget(builder,"BannerArrow"); + widgets->SaveSocketBox = yon_gtk_builder_get_widget(builder,"SaveSocketBox"); + widgets->LoadSocketBox = yon_gtk_builder_get_widget(builder,"LoadSocketBox"); + + widgets->MainMenuItemSettings = yon_gtk_builder_get_widget(builder,"MainMenuItemSettings"); + widgets->MainMenuItemAbout = yon_gtk_builder_get_widget(builder,"MainMenuItemAbout"); + widgets->MainMenuItemDocumentation = yon_gtk_builder_get_widget(builder,"MainMenuItemDocumentation"); yon_apps_init(); + g_signal_connect(G_OBJECT(widgets->MainMenuItemSettings),"activate",G_CALLBACK(on_settings_open),widgets); g_signal_connect(G_OBJECT(widgets->BannerButton),"clicked",G_CALLBACK(on_reveal_banner),widgets); yon_window_config_setup(GTK_WINDOW(widgets->Window)); @@ -1382,16 +606,14 @@ main_window *yon_main_window_setup(){ free(path); { int banner_hidden = 0; - yon_window_config_get_parameter("Settings","HideBanner", &banner_hidden,YON_TYPE_BOOLEAN); + yon_window_config_get_parameter("Settings",hide_banner_parameter, &banner_hidden,YON_TYPE_BOOLEAN); gtk_revealer_set_transition_type(GTK_REVEALER(widgets->BannerRevealer),!banner_hidden?GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT:GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->BannerRevealer),!banner_hidden); gtk_menu_button_set_direction(GTK_MENU_BUTTON(widgets->BannerArrow),!banner_hidden?GTK_ARROW_LEFT:GTK_ARROW_RIGHT); } gtk_widget_show(widgets->Window); - widgets->current_theme = yon_theme_update(widgets); yon_interface_update(widgets); - widgets->current_theme->list_update_func(widgets->current_theme); return widgets; } diff --git a/source/ubl-settings-manager.h b/source/ubl-settings-manager.h index bd1b3a5..783c4e5 100644 --- a/source/ubl-settings-manager.h +++ b/source/ubl-settings-manager.h @@ -37,10 +37,11 @@ #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/" @@ -48,6 +49,15 @@ #define LocaleName "ubl-settings-manager" #define ubl_settings_infoPath "ubl-settings-info" #define ubl_settings_infoPathLaunch "ubl-settings-info --socket-id=" + +#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; @@ -75,21 +85,6 @@ typedef struct IconSection{ char *categories; } IconSection; -typedef struct { - template_config_fields; - int apps_icon_size; - dictionary *sections; - int labelDensity; - int lock_settings; - int double_click; - dictionary *SettingsSections; - int banner_hidden; - - GHashTable *themes; -} config; - -extern config main_config; - typedef struct { GtkWidget *MainFrame; GtkWidget *MainBox; @@ -113,40 +108,36 @@ typedef struct { } SectionSettingSegment; typedef struct theme_struct { - GtkWidget *MainBox; - GtkWidget *AppsTree; - GtkWidget *SocketBox; - GtkWidget *HideBox; - GtkWidget *Socket; - int (*list_update_func)(struct theme_struct*); - char *(*get_command_func)(struct theme_struct*); - void (*set_sections_func)(struct theme_struct*); - GtkTreeStore *AppsStore; + 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 *AppsTree; GtkWidget *SocketBox; GtkWidget *HideBox; - GtkWidget *Socket; int (*list_update_func)(struct gnome_theme_struct*); - char *(*get_command_func)(struct gnome_theme_struct*); - void (*set_sections_func)(struct gnome_theme_struct*); + GtkWidget *AppsTree; + GtkWidget *Socket; GtkWidget *GnomePaned; GtkWidget *GnomeInfoLogoImage; GtkCellRenderer *IconCell; } gnome_theme_struct; typedef struct main_theme_struct { + char *theme_name; GtkWidget *MainBox; - GtkWidget *AppsIconView; GtkWidget *SocketBox; GtkWidget *HideBox; - GtkWidget *Socket; int (*list_update_func)(struct main_theme_struct*); - char *(*get_command_func)(struct main_theme_struct*); - void (*set_sections_func)(struct main_theme_struct*); + GtkWidget *AppsIconView; + GtkWidget *Socket; GtkListStore *AppsList; } main_theme_struct; @@ -156,62 +147,80 @@ typedef struct { GtkWidget *TitleLabel; GtkWidget *ThemeBox; GtkWidget *SocketBox; + GtkWidget *BackButton; GtkWidget *SettingsButton; GtkWidget *BannerImage; GtkWidget *BannerArrow; GtkWidget *BannerButton; GtkWidget *BannerRevealer; + GtkWidget *LoadSocket; + GtkWidget *LoadSocketBox; + GtkWidget *SaveSocket; + GtkWidget *SaveSocketBox; + GtkWidget *OptionsSocket; + GtkWidget *OptionsSocketBox; + + GtkWidget *MainMenuItemSettings; + GtkWidget *MainMenuItemAbout; + GtkWidget *MainMenuItemDocumentation; + theme_struct *current_theme; } 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; -void on_plug_added(GtkSocket* self, main_window *builder); -void on_plug_removed(GtkSocket* self, main_window *widgets); -void on_Item_activated(GtkIconView* self, GtkTreePath* path, main_window *applist); -void on_gnome_Item_activated(GtkIconView* self, GtkTreePath* path, main_window *applist); -void on_item_selection_changed(GtkIconView *IV, main_window *widgets); -void on_ButtonOpenHelp_activated(GtkWidget *button, GtkBuilder *builder); -void on_backToSettingsButton_clicked(GtkWidget *button,main_window *sctb); -void on_CancelHelpButton_activated(GtkWidget *button,GtkBuilder *builder); -void on_ReadHelpButton_activated(GtkWidget *button, GtkBuilder *builder); -int on_settings_accept(GtkWidget *button, dictionary **widgetsDs); -void on_paned_move(GtkPaned* self, GtkScrollType* scroll_type, main_window *widgets); -int on_settingsOpen(GtkWidget *button, main_window *widgets); -int on_settings_icon_size_changed(GtkWidget* self, main_window *widgets); -int on_settings_cancel(GtkWidget *button, main_window *widgets); -int reload_list(IVGraphicals *section); -int hide_if_unfound(dictionary *widgetsDc); -GtkWidget *create_socket(main_window *builder); -int setup_config(); -void update_double_clicks(dictionary *widgetsD); -void yon_icv_resize_item(dictionary *icdict, GtkWidget *paned); -int yon_set_sections(IconSection *section); -void yon_set_default_sections(dictionary *section); -dictionary *yon_section_new(dictionary *section, char *section_name, char *categories); -void yon_switch_theme(dictionary **dict, dictionary *newone); -void yon_segment_show(main_window *widgets, SectionSettingSegment *sgm); -SectionSettingSegment *yon_create_section_setting(char *name, char *categories); -void yon_segments_show(main_window *widgets); -void yon_segments_hide(main_window *widgets); -dictionary *yon_create_icon_section_list(dictionary *sections); -int yon_show_icon_views(dictionary *IVS,main_window *widgets); -void yon_icon_size_convert(int mode); -int launch(thread_output *thread); -float yon_time_average(dictionary *times); -void yon_time_reg_for_average(dictionary *listofregs, int size, time_t tm); -int yon_get_icon_size(int size); +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 \ No newline at end of file diff --git a/ubl-settings-manager-settings.glade b/ubl-settings-manager-settings.glade index 7bf5d44..fb1c050 100644 --- a/ubl-settings-manager-settings.glade +++ b/ubl-settings-manager-settings.glade @@ -2,44 +2,63 @@ - + + 24 + 64 + 24 + 8 + 8 + + + True False - 440 - 250 - ru.ublinux.ubl-settings-manager + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.accept-symbolic + + + False + True + com.ublinux.ubl-settings-manager True False + 5 + 5 + 5 + 5 vertical + 5 True False - 5 - 5 - 5 - 5 - 5 - 2 0.019999999552965164 in True False - 12 + 5 + 5 + 5 + 5 True False + 10 True False vertical - + True False 5 @@ -52,15 +71,12 @@ - + True True - 10 - 10 - 10 - 10 adjustment1 - 5 + 64 + 0 0 False @@ -78,11 +94,13 @@ - + 64 64 True False + center + center 32 com.ublinux.ubl-settings-manager @@ -109,7 +127,7 @@ - True + False True 0 @@ -118,34 +136,27 @@ True False - 5 - 5 - 5 - 5 - 2 - 5 0.019999999552965164 in True False + 5 + 5 + 5 + 5 True False vertical - + combo True False center - 10 - 10 - 10 - 10 - 5 True 0 @@ -172,7 +183,7 @@ - True + False True 1 @@ -181,15 +192,12 @@ True False - 3 - 3 + 5 True False center - 12 - 12 Double click selection 0.019999999552965164 @@ -200,11 +208,9 @@ - + True True - 10 - 10 False @@ -221,17 +227,11 @@ - + Sections management True True True - 5 - 5 - 5 - 5 - 5 - 5 False @@ -239,87 +239,14 @@ 3 - - - True - False - vertical - - - True - False - - - True - False - 5 - 5 - 5 - 5 - 3 - 30 - True - - - Close - 200 - True - True - True - 2 - image8 - - - False - True - 0 - - - - - Apply - 200 - True - True - True - 2 - image9 - - - False - True - 1 - - - - - True - True - 0 - - - - - False - True - 1 - - - - - False - True - 5 - - - + True False - + True False UBLinux Settings Manager @@ -337,17 +264,32 @@ 5 + + + Close + True + True + True + image8 + + + 1 + + + + + Apply + True + True + True + image9 + + + end + 2 + + - - True - False - process-stop-symbolic - - - True - False - emblem-ok-symbolic - diff --git a/ubl-settings-manager-theme-gnome-section.glade b/ubl-settings-manager-theme-gnome-section.glade index 8e73fdb..600e2c4 100644 --- a/ubl-settings-manager-theme-gnome-section.glade +++ b/ubl-settings-manager-theme-gnome-section.glade @@ -1,7 +1,8 @@ - + + True True @@ -9,7 +10,11 @@ True False + 5 False + diff --git a/ubl-settings-manager-theme-gnome.glade b/ubl-settings-manager-theme-gnome.glade index b855a17..249c798 100644 --- a/ubl-settings-manager-theme-gnome.glade +++ b/ubl-settings-manager-theme-gnome.glade @@ -34,13 +34,40 @@ True False - + True False vertical 5 - + + True + True + edit-find-symbolic + False + False + + + False + True + 0 + + + + + True + False + vertical + 5 + + + + + + True + True + 1 + @@ -67,10 +94,6 @@ True False 3 - 3 - 3 - 3 - 3 0 in @@ -130,7 +153,7 @@ - False + True True 1 diff --git a/ubl-settings-manager.glade b/ubl-settings-manager.glade index 9225025..3ed6809 100644 --- a/ubl-settings-manager.glade +++ b/ubl-settings-manager.glade @@ -108,45 +108,6 @@ - - True - False - False - 4 - - - True - False - Settings - True - - - - - - True - False - About... - True - - - - - - True - False - Documentation - True - - - - True False @@ -203,6 +164,7 @@ True False + 5 True @@ -287,7 +249,9 @@ True False + 5 vertical + 5 True @@ -308,10 +272,7 @@ Icon True False - 5 5 - 5 - 5 @@ -370,7 +331,7 @@ - + True False False @@ -382,20 +343,10 @@ False 5 - + True - True - False - True - left - False - - - - + False + com.ublinux.libublsettingsui-gtk3.pan-left False @@ -428,9 +379,8 @@ True False True - menu1 + MainMenu none - settingsPopover @@ -441,7 +391,7 @@ - + True False center @@ -456,7 +406,7 @@ - + True False center @@ -467,7 +417,7 @@ end - 4 + 5 @@ -477,193 +427,4 @@ - - True - False - menu - - - True - False - - - - - True - False - - - - - True - False - True - - - - - - 1 - 5 - 2 - 1 - 1 - - - 1 - 1 - 10 - - - - True - False - ubconfig-gui - 6 - - - True - False - - - True - False - Element 1 - - - - - True - False - Element 2 - - - True - False - - - True - False - Element 3 - - - - - - - - - Element 4 - True - False - image3 - False - - - - - - - - - - - Стандартная тема - - - GNOME тема - - - - - True - False - - - True - False - - - - - - - - - False - - - True - False - 0 - none - - - True - False - 5 - 5 - 5 - 5 - - - True - False - 4 - 4 - 4 - 4 - vertical - - - True - True - True - Settings - - - False - True - 3 - - - - - True - True - True - Documentation - - - False - True - 4 - - - - - True - True - True - About system - - - False - True - 5 - - - - - - - - - - - - -