Application autoload page

pull/196/head
parent 830841d703
commit daa7b17df5

@ -0,0 +1,4 @@
GROUP;APPLICATION;DESCRIPTION
Plank dock-panel;plank.desktop;Universal macOS-style dock-panel
Conky monitor;conky.desktop;System monitor
Hostalive;check-hostalive.desktop;Check the internet is alive
1 GROUP APPLICATION DESCRIPTION
2 Plank dock-panel plank.desktop Universal macOS-style dock-panel
3 Conky monitor conky.desktop System monitor
4 Hostalive check-hostalive.desktop Check the internet is alive

@ -46,5 +46,6 @@
<file>filesystems-format-list.csv</file>
<file>groups-list.csv</file>
<file>vfs-list.csv</file>
<file>applications-list.csv</file>
</gresource>
</gresources>

@ -67,6 +67,7 @@ set(DEPENDFILES
../filesystems-format-list.csv
../groups-list.csv
../vfs-list.csv
../applications-list.csv
../icons-builtin/install_type_custom_normal.png
../icons-builtin/install_type_data_only_normal.png
../icons-builtin/install_type_fast_normal.png
@ -136,6 +137,7 @@ set(SOURCE_FILES
ubinstall-gtk-kernel.c
ubinstall-gtk-language.c
ubinstall-gtk-config-hub.c
ubinstall-gtk-startup-apps.c
ubinstall-gtk.h
ubl-strings.h
)

@ -54,7 +54,6 @@ int yon_os_components_save(main_window *widgets){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox));
GList *iter;
int size;
int overall_num=0;
config_str modules = NULL;
for(iter = list;iter;iter=iter->next){
os_row *row = g_object_get_data(iter->data,"kernel_row");
@ -63,12 +62,9 @@ int yon_os_components_save(main_window *widgets){
if (status){
yon_char_parsed_add_or_create_if_exists(modules,&size,target);
}
overall_num++;
}
g_list_free(list);
if (size&&size==overall_num){
yon_config_register(modules_parameter,modules_parameter_command,"auto");
} else if (size){
if (size){
char *final = yon_char_parsed_to_string(modules,size,",");
yon_config_register(modules_parameter,modules_parameter_command,final);
} else {

@ -178,6 +178,7 @@ void yon_configuration_hub_init(main_window *widgets){
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubPersonalListBox),KEYBOARD_TAB_LABEL,"com.ublinux.ubl-settings-keyboard",YON_PAGE_KEYBOARD);
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubSystemListBox),USERS_TAB_LABEL,"com.ublinux.ubl-settings-usergroups",YON_PAGE_USERS);
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubSystemListBox),STARTUP_LABEL,"com.ublinux.ubl-settings-info",YON_PAGE_STARTUP);
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubSystemListBox),STARTUP_APP_LABEL,"com.ublinux.ubl-settings-info",YON_PAGE_APP_STARTUP);
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubSystemListBox),BOOTLOADER_LABEL,"com.ublinux.ubl-settings-bootloader",YON_PAGE_BOOTLOADER);
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubSystemListBox),NETWORK_LABEL,"com.ublinux.ubl-settings-multiseat",YON_PAGE_NETWORK);
yon_configuration_hub_add(GTK_FLOW_BOX(widgets->HubPackagesListBox),KERNEL_LABEL,kernel_icon_path,YON_PAGE_KERNEL);

@ -463,7 +463,12 @@ void yon_install_init(main_window *widgets, enum YON_PAGES page){
yon_char_parsed_free(fs_types,size);
char *parameter = config(part_fs_type_parameter);
if (!yon_char_is_empty(parameter)){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(fs_type_combo),parameter);
if (!gtk_combo_box_set_active_id(GTK_COMBO_BOX(fs_type_combo),parameter)){
if(gtk_combo_box_get_has_entry(GTK_COMBO_BOX(fs_type_combo))){
gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(fs_type_combo))),parameter);
}
}
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(fs_type_combo),0);
}

@ -0,0 +1,218 @@
#include "ubinstall-gtk.h"
void on_srartup_apps_toggled(GtkWidget *, char *path, main_window *widgets){
GtkTreeIter iter;
int status;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->StartupAppsList),&iter,path);
gtk_tree_model_get(GTK_TREE_MODEL(widgets->StartupAppsList),&iter,0,&status,-1);
gtk_list_store_set(widgets->StartupAppsList,&iter,0,!status,-1);
}
void on_startup_apps_selection_changed(GtkWidget *,main_window *widgets){
GtkTreeIter iter;
GtkTreeModel *model;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->StartupAppsTree)),&model,&iter)){
int status;
gtk_tree_model_get(model,&iter,4,&status,-1);
if (status){
gtk_widget_set_sensitive(widgets->StartupAppsEditButton,1);
gtk_widget_set_sensitive(widgets->StartupAppsRemoveButton,1);
return;
}
}
gtk_widget_set_sensitive(widgets->StartupAppsEditButton,0);
gtk_widget_set_sensitive(widgets->StartupAppsRemoveButton,0);
}
void on_startup_apps_remove(GtkWidget *self,main_window *widgets){
GtkTreeIter iter;
GtkTreeModel *model;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->StartupAppsTree)),&model,&iter)){
char *unit;
int deletable;
gtk_tree_model_get(model,&iter,2,&unit,4,&deletable,-1);
if (!deletable) return;
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text = SERVICE_REMOVE_CONFIRMATION_LABEL(unit);
data->title = SERVICE_REMOVE_TITLE_LABEL;
if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){
gtk_list_store_remove(widgets->StartupList,&iter);
}
}
}
void yon_startup_apps_setup(main_window *widgets){
GtkTreeIter iter;
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->StartupAppsList),&iter)){
int size;
config_str apps = yon_resource_open_file(apps_list_path,&size);
for (int i=1;i<size;i++){
int parsed_size;
config_str parsed = yon_char_parse(apps[i],&parsed_size,";");
if (parsed_size&&!yon_char_is_empty(parsed[0])){
gtk_list_store_append(widgets->StartupAppsList,&iter);
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,1,parsed[0],2,yon_char_return_if_exist(parsed[1],""),3,yon_char_return_if_exist(parsed[2],""),-1);
}
}
}
char *startup = config(SERVICES_ENABLE_parameter);
if (!yon_char_is_empty(startup)){
if (!strcmp(startup,"auto")){
for_iter(GTK_TREE_MODEL(widgets->StartupAppsList),&iter){
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,-1);
}
} else {
int parsed_size;
config_str parsed = yon_char_parse(startup,&parsed_size,",");
for_iter(GTK_TREE_MODEL(widgets->StartupAppsList),&iter){
char *target;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->StartupAppsList),&iter,2,&target,-1);
if (strstr(target,",")){
int target_size;
config_str target_parsed = yon_char_parse(target,&target_size,",");
int found =0;
for (int i=0;i<target_size;i++){
int pos = yon_char_parsed_check_exist(parsed,parsed_size,target_parsed[i]);
if (pos>-1){
found++;
parsed = yon_char_parsed_rip(parsed,&parsed_size,pos);
}
}
if (found == target_size){
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,-1);
} else {
gtk_list_store_set(widgets->StartupAppsList,&iter,0,0,-1);
}
yon_char_parsed_free(target_parsed,target_size);
} else {
int pos = yon_char_parsed_check_exist(parsed,parsed_size,target);
if (pos>-1){
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,-1);
parsed = yon_char_parsed_rip(parsed,&parsed_size,pos);
} else {
gtk_list_store_set(widgets->StartupAppsList,&iter,0,0,-1);
}
}
}
if (parsed_size&&parsed){
for (int i=0;i<parsed_size;i++){
gtk_list_store_append(widgets->StartupAppsList,&iter);
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,2,parsed[i],-1);
}
}
yon_char_parsed_free(parsed,parsed_size);
}
}
}
void on_startup_app_add_accept(GtkWidget *self, main_window *widgets){
startup_app_window *window = g_object_get_data(G_OBJECT(self),"startup_app_window");
const char *unit = gtk_entry_get_text(GTK_ENTRY(window->UnitEntry));
const char *app = gtk_entry_get_text(GTK_ENTRY(window->ServiceEntry));
const char *description = gtk_entry_get_text(GTK_ENTRY(window->DescriptionEntry));
if (yon_char_is_empty(app)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),_EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->ServiceEntry);
return;
}
GtkTreeIter iter;
gtk_list_store_append(widgets->StartupAppsList,&iter);
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,1,unit,2,app,3,description,4,1,-1);
on_subwindow_close(self);
}
void on_startup_app_edit_accept(GtkWidget *self, main_window *widgets){
GtkTreeIter iter;
GtkTreeModel *model;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->StartupServicesTree)),&model,&iter)){
startup_app_window *window = g_object_get_data(G_OBJECT(self),"startup_app_window");
const char *unit = gtk_entry_get_text(GTK_ENTRY(window->UnitEntry));
const char *app = gtk_entry_get_text(GTK_ENTRY(window->ServiceEntry));
const char *description = gtk_entry_get_text(GTK_ENTRY(window->DescriptionEntry));
if (yon_char_is_empty(app)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),_EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->ServiceEntry);
return;
}
gtk_list_store_set(widgets->StartupAppsList,&iter,0,1,1,unit,2,app,3,description,4,1,-1);
}
on_subwindow_close(self);
}
startup_app_window *yon_startup_app_window_new(){
startup_app_window *window = new(startup_app_window);
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_service);
window->Window = yon_gtk_builder_get_widget(builder,"MainWindow");
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->UnitEntry = yon_gtk_builder_get_widget(builder,"UnitEntry");
window->ServiceEntry = yon_gtk_builder_get_widget(builder,"ServiceEntry");
window->DescriptionEntry = yon_gtk_builder_get_widget(builder,"DescriptionEntry");
window->AppLabel = yon_gtk_builder_get_widget(builder,"AppLabel");
window->GroupLabel = yon_gtk_builder_get_widget(builder,"GroupLabel");
window->DescriptionLabel = yon_gtk_builder_get_widget(builder,"DescriptionLabel");
gtk_label_set_text(GTK_LABEL(window->AppLabel),APP_LABEL);
gtk_label_set_text(GTK_LABEL(window->AppLabel),GROUP_LABEL);
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_object_set_data(G_OBJECT(window->AcceptButton),"startup_app_window",window);
return window;
}
void on_startup_app_add(GtkWidget *, main_window *widgets){
startup_app_window *window = yon_startup_app_window_new();
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),SERVICE_ADD_TITLE_LABEL,icon_path,"app_add_window");
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_startup_app_add_accept),widgets);
gtk_widget_show(window->Window);
}
void on_startup_app_edit(GtkWidget *, main_window *widgets){
GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->StartupServicesTree)),NULL,&iter)){
char *app, *unit, *description;
int status;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->StartupAppsList),&iter,1,&unit,2,&app,3,&description,4,&status,-1);
if (status){
startup_app_window *window = yon_startup_app_window_new();
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),SERVICE_EDIT_TITLE_LABEL,icon_path,"app_add_window");
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_startup_app_edit_accept),widgets);
gtk_entry_set_text(GTK_ENTRY(window->UnitEntry),unit);
gtk_entry_set_text(GTK_ENTRY(window->ServiceEntry),app);
gtk_entry_set_text(GTK_ENTRY(window->DescriptionEntry),description);
gtk_widget_show(window->Window);
}
}
}
int yon_startup_app_save(main_window *widgets){
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->StartupList);
int size = 0;
int list_size=0;
config_str modules = NULL;
for_iter(model,&iter){
list_size++;
char *target;
int status;
gtk_tree_model_get(model,&iter,0,&status,2,&target,-1);
if (status){
yon_char_parsed_add_or_create_if_exists(modules,&size,target);
}
}
if (size){
if (list_size==size){
yon_config_register(SERVICES_ENABLE_parameter,SERVICES_ENABLE_parameter_command,"auto");
} else {
char *final = yon_char_parsed_to_string(modules,size,",");
yon_config_register(SERVICES_ENABLE_parameter,SERVICES_ENABLE_parameter_command,final);
}
yon_char_parsed_free(modules,size);
} else {
yon_config_remove_by_key(SERVICES_ENABLE_parameter);
}
return 1;
}

@ -405,6 +405,7 @@ void on_exit_accepted(main_window *widgets){
main_config.exit_accepted=1;
while(gtk_events_pending()) gtk_main_iteration();
gtk_widget_destroy(widgets->MainWindow);
gtk_main_quit();
}
gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets){
@ -823,6 +824,13 @@ void yon_main_window_create(main_window *widgets){
widgets->StartupChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StartupChosenCell"));
widgets->StartupList = GTK_LIST_STORE(gtk_builder_get_object(builder,"StartupList"));
widgets->StartupAppsTree = yon_gtk_builder_get_widget(builder,"StartupAppsTree");
widgets->StartupAppsAddButton = yon_gtk_builder_get_widget(builder,"StartupAppsAddButton");
widgets->StartupAppsEditButton = yon_gtk_builder_get_widget(builder,"StartupAppsEditButton");
widgets->StartupAppsRemoveButton = yon_gtk_builder_get_widget(builder,"StartupAppsRemoveButton");
widgets->StartupAppsChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StartupAppsChosenCell"));
widgets->StartupAppsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"StartupAppsList"));
// widgets->BootloaderImage = yon_gtk_builder_get_widget(builder,"BootloaderImage");
widgets->BootloadTimerSwitch = yon_gtk_builder_get_widget(builder,"BootloadTimerSwitch");
widgets->BootloadTimerSpin = yon_gtk_builder_get_widget(builder,"BootloadTimerSpin");
@ -943,6 +951,10 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->StartupServicesEditButton),"clicked",G_CALLBACK(on_startup_service_edit),widgets);
g_signal_connect(G_OBJECT(widgets->StartupServicesRemoveButton),"clicked",G_CALLBACK(on_startup_services_remove),widgets);
g_signal_connect(G_OBJECT(widgets->StartupAppsTree),"cursor-changed",G_CALLBACK(on_startup_apps_selection_changed),widgets);
g_signal_connect(G_OBJECT(widgets->StartupAppsAddButton),"clicked",G_CALLBACK(on_startup_app_add),widgets);
g_signal_connect(G_OBJECT(widgets->StartupAppsEditButton),"clicked",G_CALLBACK(on_startup_app_edit),widgets);
g_signal_connect(G_OBJECT(widgets->StartupAppsRemoveButton),"clicked",G_CALLBACK(on_startup_apps_remove),widgets);
g_signal_connect(G_OBJECT(widgets->AutoHostnameCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),widgets->HotnameEntry);

@ -77,6 +77,7 @@
#define kernel_list_path "resource:///com/ublinux/csv/kernel-list.csv"
#define kernel_list_addon_path "resource:///com/ublinux/csv/kernel-list-addon.csv"
#define services_list_path "resource:///com/ublinux/csv/services-list.csv"
#define apps_list_path "resource:///com/ublinux/csv/applications-list.csv"
#define network_path "resource:///com/ublinux/csv/network-list.csv"
#define fs_types_path "resource:///com/ublinux/csv/filesystems-format-list.csv"
#define vfs_list_path "resource:///com/ublinux/csv/vfs-list.csv"
@ -682,6 +683,12 @@ typedef struct {
GtkWidget *StartupServicesRemoveButton;
GtkCellRenderer *StartupChosenCell;
GtkListStore *StartupList;
GtkWidget *StartupAppsTree;
GtkWidget *StartupAppsAddButton;
GtkWidget *StartupAppsEditButton;
GtkWidget *StartupAppsRemoveButton;
GtkCellRenderer *StartupAppsChosenCell;
GtkListStore *StartupAppsList;
// GtkWidget *BootloaderImage;
GtkWidget *BootloadTimerSwitch;
@ -962,6 +969,19 @@ typedef struct {
GtkWidget *AcceptButton;
} startup_service_window;
typedef struct {
GtkWidget *Window;
GtkWidget *StatusBox;
GtkWidget *UnitEntry;
GtkWidget *ServiceEntry;
GtkWidget *DescriptionEntry;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
GtkWidget *AppLabel;
GtkWidget *GroupLabel;
GtkWidget *DescriptionLabel;
} startup_app_window;
struct pacman_struct{
main_window *widgets;
const char *find_package;
@ -1404,3 +1424,14 @@ int yon_configuration_hub_save(main_window *widgets);
int yon_packages_tab_save(main_window *widgets);
gboolean on_install_slider_slide_proceed(main_window *widgets);
gboolean on_install_slider_slide(main_window *widgets);
void on_srartup_apps_toggled(GtkWidget *, char *path, main_window *widgets);
void on_startup_apps_selection_changed(GtkWidget *,main_window *widgets);
void on_startup_apps_remove(GtkWidget *self,main_window *widgets);
void yon_startup_apps_setup(main_window *widgets);
void on_startup_app_add_accept(GtkWidget *self, main_window *widgets);
void on_startup_app_edit_accept(GtkWidget *self, main_window *widgets);
startup_app_window *yon_startup_app_window_new();
void on_startup_app_add(GtkWidget *, main_window *widgets);
void on_startup_app_edit(GtkWidget *, main_window *widgets);
int yon_startup_app_save(main_window *widgets);

@ -275,11 +275,19 @@ NULL)
#define PACMAN_SOFTWARE_LABEL _("Installing Packages")
#define REGION_ICON_LABEL _("Location")
#define STARTUP_LABEL _("Startup services")
#define STARTUP_APP_LABEL _("Autorun of services")
#define BOOTLOADER_LABEL _("Boot load")
#define NETWORK_LABEL _("Network")
#define ENABLE_VNC_LABEL _("Enable VNC server")
#define ENABLE_RDP_LABEL _("Enable RDP server")
#define APP_TITLE_LABEL _("Autorun of application")
#define APP_TITLE_INFO_LABEL _("Configuring autorun application")
#define APP_LABEL _("Application:")
#define GROUP_LABEL _("Group:")
#define APP_TABLE_LABEL _("Application")
#define GROUP_TABLE_LABEL _("Group")
// #define _LABEL _("<i><b>Package:</b></i>")
// #define _LABEL _("<i><b>Module:</b></i>")
// #define _LABEL _("New section at")

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- Generated with glade 3.40.0 -->
<interface domain="ubinstall-gtk">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubinstall-gtk.css -->
@ -54,7 +54,7 @@
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<object class="GtkLabel" id="AppLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Unit:</property>
@ -90,7 +90,7 @@
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<object class="GtkLabel" id="GroupLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Service:</property>
@ -126,7 +126,7 @@
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<object class="GtkLabel" id="DescriptionLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Description:</property>
@ -211,9 +211,9 @@
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
<widget name="DescriptionLabel"/>
<widget name="GroupLabel"/>
<widget name="AppLabel"/>
</widgets>
</object>
</interface>

Loading…
Cancel
Save