Bootloader command change

pull/108/head
parent 027034ab3f
commit f6342ad2ce

@ -2,110 +2,124 @@
void on_menu_chosen(GtkWidget *, yon_menu_item *item){
if (strcmp(item->target,DEFAULT_MENU_ITEM_LABEL)){
gtk_entry_set_text(GTK_ENTRY(item->widgets->OSDefaultEntry),item->target);
} else {
gtk_entry_set_text(GTK_ENTRY(item->widgets->OSDefaultEntry),DEFAULT_MENU_ITEM_LABEL);
void yon_menu_open_submenu(yon_menu_window *window, yon_menu_item *item){
int size;
config_str options = yon_config_load(get_menus_entry_command,&size);
for (int i=1;i<size;i++){
yon_char_remove_last_symbol(options[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(options[i],&parsed_size,";");
int id_size;
config_str id_parsed = yon_char_parse(parsed[0],&id_size,">");
int name_size;
config_str name_parsed = yon_char_parse(parsed[1],&name_size,">");
if (yon_char_parsed_check_exist(id_parsed,id_size,item->id)==0){
yon_menu_item *subitem = yon_menu_add_item(window,parsed[0],name_parsed[1],0);
gtk_list_box_insert(GTK_LIST_BOX(window->ChildrenListBox),subitem->MenuItemRow,-1);
gtk_widget_hide(subitem->ArrowImage);
}
yon_char_parsed_free(id_parsed,id_size);
yon_char_parsed_free(name_parsed,name_size);
yon_char_parsed_free(parsed,parsed_size);
}
}
void yon_menu_ungrab(yon_menu_window *window){
GdkDisplay *display = gdk_display_get_default();
GdkSeat *seat = gdk_display_get_default_seat(display);
if (item->window->seat_grab)
if (window->seat_grab)
gdk_seat_ungrab(seat);
else
gtk_grab_remove(item->window->MenuWindow);
gtk_widget_destroy(item->window->MenuWindow);
gtk_grab_remove(window->MenuWindow);
gtk_widget_destroy(window->MenuWindow);
}
void on_menu_chosen(GtkWidget *, GtkListBoxRow* row, yon_menu_window *window){
yon_menu_item *item = g_object_get_data(G_OBJECT(row),"yon_menu_item");
if (item->children){
yon_menu_open_submenu(window,item);
gtk_widget_show(window->ChildrenRevealer);
gtk_widget_hide(window->ItemsRevealer);
gtk_revealer_set_reveal_child(GTK_REVEALER(window->ItemsRevealer),0);
gtk_revealer_set_reveal_child(GTK_REVEALER(window->ChildrenRevealer),1);
} else {
gtk_entry_set_text(GTK_ENTRY(window->target),item->name);
yon_config_register(GRUB_DEFAULT_parameter,DEFAULT_MENU_ITEM_LABEL,item->id);
yon_menu_ungrab(window);
}
}
void on_submenu_open(GtkWidget *,yon_menu_item *item){
yon_menu_window *window = item->window;
yon_menu_item *yon_menu_add_item(yon_menu_window *target_menu,const char *id, const char *name, int children){
yon_menu_item *item = yon_menu_item_new();
item->window=target_menu;
item->children = children;
item->id = yon_char_new(id);
item->name = yon_char_new(name);
gtk_label_set_text(GTK_LABEL(item->MenuTextLabel),item->name);
dictionary *dact = NULL;
for_dictionaries(dact,item->children){
yon_menu_item *child = yon_dictionary_get_data(dact,yon_menu_item*);
gtk_widget_hide(child->NextIconButton);
gtk_list_box_insert(GTK_LIST_BOX(window->ChildrenListBox),child->MenuItemBox,-1);
g_signal_connect(G_OBJECT(child->MenuButton),"clicked",G_CALLBACK(on_menu_chosen),dact->data);
}
gtk_revealer_set_reveal_child(GTK_REVEALER(item->window->ItemsRevealer),0);
gtk_revealer_set_reveal_child(GTK_REVEALER(item->window->ChildrenRevealer),1);
gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->ChildrenRevealer)),window->ChildrenRevealer,1,1,0,GTK_PACK_START);
gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->ItemsRevealer)),window->ItemsRevealer,0,0,0,GTK_PACK_START);
yon_on_revealer_switched(window);
g_signal_connect(G_OBJECT(window->MenuWindow),"size-allocate",G_CALLBACK(on_menu_window_size_reallocated),window);
// g_signal_connect(G_OBJECT(item->MenuItemRow),"clicked",G_CALLBACK(on_menu_chosen),item);
g_object_set_data(G_OBJECT(item->MenuItemRow),"yon_menu_item",item);
gtk_widget_show(item->MenuItemRow);
return item;
}
yon_menu_window *yon_menu_window_open(GtkWidget *, main_window *widgets){
yon_menu_window *window = yon_menu_window_new();
window->target = widgets->OSDefaultEntry;
g_signal_connect(G_OBJECT(window->ItemsListBox),"row-activated",G_CALLBACK(on_menu_chosen),window);
g_signal_connect(G_OBJECT(window->ChildrenListBox),"row-activated",G_CALLBACK(on_menu_chosen),window);
gtk_window_set_transient_for(GTK_WINDOW(window->MenuWindow),GTK_WINDOW(widgets->Window));
{
yon_menu_item *item = yon_menu_item_new();
item->widgets=widgets;
item->window=window;
item->children=NULL;
gtk_label_set_text(GTK_LABEL(item->MenuTextLabel),DEFAULT_MENU_ITEM_LABEL);
item->target=yon_char_new(DEFAULT_MENU_ITEM_LABEL);
gtk_list_box_insert(GTK_LIST_BOX(window->ItemsListBox),item->MenuItemBox,-1);
yon_dictionary_add_or_create_if_exists_with_data(window->menu_items,DEFAULT_MENU_ITEM_LABEL,item);
gtk_widget_show(item->MenuItemBox);
gtk_widget_hide(item->NextIconButton);
g_signal_connect(G_OBJECT(item->MenuButton),"clicked",G_CALLBACK(on_menu_chosen),item);
yon_menu_item *item = yon_menu_add_item(window,"",DEFAULT_MENU_ITEM_LABEL,0);
gtk_list_box_insert(GTK_LIST_BOX(window->ItemsListBox),item->MenuItemRow,-1);
gtk_widget_hide(item->ArrowImage);
}
int size;
config_str parsed = yon_config_load(get_menus_entry_command,&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(parsed[i],'\n');
int param_size;
config_str parameter = yon_char_parse(parsed[i],&param_size,">");
dictionary * cur_item = NULL;
if (param_size==2&&(cur_item=yon_dictionary_get(&window->menu_items,parameter[0]))){
yon_menu_item *item = (yon_menu_item*)cur_item->data;
yon_menu_item *item_child = yon_menu_item_new();
gtk_widget_hide(item_child->NextIconButton);
gtk_label_set_text(GTK_LABEL(item_child->MenuTextLabel),parameter[1]);
item_child->target=yon_char_new(parsed[i]);
gtk_widget_show(item_child->MenuItemBox);
yon_dictionary_add_or_create_if_exists_with_data(item->children,parameter[1],item_child);
item_child->widgets=widgets;
item_child->window=window;
} else {
yon_menu_item *item = yon_menu_item_new();
item->widgets=widgets;
item->window=window;
gtk_label_set_text(GTK_LABEL(item->MenuTextLabel),parameter[0]);
item->target=yon_char_new(parsed[i]);
gtk_list_box_insert(GTK_LIST_BOX(window->ItemsListBox),item->MenuItemBox,-1);
yon_dictionary_add_or_create_if_exists_with_data(window->menu_items,parameter[0],item);
gtk_widget_show(item->MenuItemBox);
if (param_size==2){
yon_menu_item *item_child = yon_menu_item_new();
gtk_widget_show(item->NextIconButton);
gtk_widget_hide(item_child->NextIconButton);
gtk_label_set_text(GTK_LABEL(item_child->MenuTextLabel),parameter[1]);
item_child->target=yon_char_new(parsed[i]);
gtk_widget_show(item_child->MenuItemBox);
item_child->widgets=widgets;
item_child->window=window;
g_signal_connect(G_OBJECT(item->MenuButton),"clicked",G_CALLBACK(on_submenu_open),item);
yon_dictionary_add_or_create_if_exists_with_data(item->children,parameter[1],item_child);
} else {
gtk_widget_hide(item->NextIconButton);
g_signal_connect(G_OBJECT(item->MenuButton),"clicked",G_CALLBACK(on_menu_chosen),item);
}
config_str options = yon_config_load(get_menus_entry_command,&size);
GHashTable *created = g_hash_table_new(g_str_hash,g_str_equal);
for (int i=1;i<size;i++){
yon_char_remove_last_symbol(options[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(options[i],&parsed_size,";");
int have_children=0;
char *children_id;
if ((children_id=strstr(parsed[0],">"))){
children_id[0]='\0';
have_children=1;
}
char *children_name;
if ((children_name=strstr(parsed[1],">"))){
children_name[0]='\0';
have_children=1;
}
if (!g_hash_table_contains(created,parsed[0])){
g_hash_table_add(created,parsed[0]);
yon_menu_item *item = yon_menu_add_item(window,parsed[0],parsed[1],have_children);
gtk_list_box_insert(GTK_LIST_BOX(window->ItemsListBox),item->MenuItemRow,-1);
if (!have_children){
gtk_widget_hide(item->ArrowImage);
}
}
}
g_hash_table_unref(created);
yon_char_parsed_free(options,size);
gtk_window_set_transient_for(GTK_WINDOW(window->MenuWindow), GTK_WINDOW(widgets->Window));
int x,y,width;
gtk_widget_realize(window->MenuWindow);
gdk_window_get_position(gtk_widget_get_window(widgets->MenuButton),&x,&y);
gtk_widget_translate_coordinates(widgets->MenuButton,widgets->Window,x,y,&window->button_pos_x,&window->button_pos_y);
gtk_window_get_size(GTK_WINDOW(window->MenuWindow),&width,NULL);
GtkAllocation alloc;
gtk_widget_get_allocation(widgets->MenuButton, &alloc);
gtk_window_get_position(GTK_WINDOW(widgets->Window),&x,&y);
gtk_window_move(GTK_WINDOW(window->MenuWindow),x+window->button_pos_x-width,y+window->button_pos_y);
gtk_widget_realize(window->MenuWindow);
gtk_window_move(GTK_WINDOW(window->MenuWindow),window->button_pos_x-width,window->button_pos_y);
gtk_widget_show(window->MenuWindow);
GdkGrabStatus status = gdk_seat_grab(gdk_display_get_default_seat(gdk_display_get_default()),gtk_widget_get_window(window->MenuWindow),GDK_SEAT_CAPABILITY_POINTER,TRUE,NULL,NULL,NULL,NULL);
if (status != GDK_GRAB_SUCCESS) {
@ -122,14 +136,7 @@ gboolean on_menu_clicked(GtkWidget *, GdkEventButton *event, yon_menu_window *wi
gtk_window_get_size(GTK_WINDOW(window->MenuWindow),&width,&height);
gtk_window_get_position(GTK_WINDOW(window->MenuWindow),&x,&y);
if (event->x_root<x||event->y_root<y||event->x_root>x+width||event->y_root>y+height){
GdkDisplay *display = gdk_display_get_default();
GdkSeat *seat = gdk_display_get_default_seat(display);
if (window->seat_grab)
gdk_seat_ungrab(seat);
else
gtk_grab_remove(window->MenuWindow);
gtk_widget_destroy(window->MenuWindow);
yon_menu_ungrab(window);
}
return 1;
@ -169,11 +176,10 @@ void on_children_clean(GtkWidget*, yon_menu_window *window){
}
void on_menu_window_size_reallocated(GtkWidget *self,GtkAllocation *,yon_menu_window *window){
int x,y,width;
gtk_window_get_size(GTK_WINDOW(window->MenuWindow),&width,NULL);
gtk_window_get_position(GTK_WINDOW(gtk_window_get_transient_for(GTK_WINDOW(window->MenuWindow))),&x,&y);
gtk_window_move(GTK_WINDOW(window->MenuWindow),x+window->button_pos_x-width,y+window->button_pos_y);
gtk_window_move(GTK_WINDOW(window->MenuWindow),window->button_pos_x-width,window->button_pos_y);
g_signal_handlers_disconnect_by_func(self,on_menu_window_size_reallocated,window);
}
@ -197,11 +203,9 @@ void on_menu_window_size_reallocated(GtkWidget *self,GtkAllocation *,yon_menu_wi
yon_menu_item *yon_menu_item_new(){
yon_menu_item *item = new(yon_menu_item);
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_menu_item);
item->MenuItemBox = yon_gtk_builder_get_widget(builder,"MenuItemBox");
item->MenuButton = yon_gtk_builder_get_widget(builder,"MenuButton");
item->MenuItemRow = yon_gtk_builder_get_widget(builder,"MenuItemRow");
item->MenuTextLabel = yon_gtk_builder_get_widget(builder,"MenuTextLabel");
item->NextIconButton = yon_gtk_builder_get_widget(builder,"NextIconButton");
item->children=NULL;
item->ArrowImage = yon_gtk_builder_get_widget(builder,"ArrowImage");
return item;
}

@ -649,6 +649,8 @@ void yon_main_window_complete(main_window *widgets){
yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size);
yon_save_window_set_postsave_function(on_save_done,widgets);
yon_load_proceed(YON_CONFIG_LOCAL);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path);
yon_interface_update(widgets);
}
@ -667,8 +669,6 @@ int main(int argc, char *argv[]){
main_config.launch_arguments=yon_char_parsed_copy(argv,argc);
main_config.launch_size=argc;
yon_main_window_complete((main_window*)widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(path);
if (getuid()!=0){
textdomain(template_ui_LocaleName);
yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);

@ -34,7 +34,7 @@
#define LocaleName "ubl-settings-bootloader"
#define get_menus_entry_command "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry"
#define get_menus_entry_command "/usr/lib/ublinux/scripts/grub-functions exec_get_all_menuentry2"
#define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL))
@ -183,6 +183,36 @@ typedef struct {
char *prev_name;
} yon_ringtone_window;
typedef struct
{
GtkWidget *MenuWindow;
GtkWidget *BackButton;
GtkWidget *ItemsRevealer;
GtkWidget *ItemsListBox;
GtkWidget *ChildrenRevealer;
GtkWidget *ChildrenListBox;
GtkWidget *target;
int seat_grab;
dictionary *menu_items;
char *cur_selection;
int button_pos_x;
int button_pos_y;
} yon_menu_window;
typedef struct
{
GtkWidget *MenuItemRow;
GtkWidget *MenuTextLabel;
GtkWidget *ArrowImage;
yon_menu_window *window;
char *name;
char *id;
int children;
} yon_menu_item;
//main
void on_save_done(main_window *, config_str output, int size);
@ -232,43 +262,17 @@ yon_ringtone_window *yon_ringtone_window_new();
//menu
typedef struct {
GtkWidget *MenuWindow;
GtkWidget *BackButton;
GtkWidget *ItemsRevealer;
GtkWidget *ItemsListBox;
GtkWidget *ChildrenRevealer;
GtkWidget *ChildrenListBox;
int seat_grab;
dictionary *menu_items;
char *cur_selection;
int button_pos_x;
int button_pos_y;
} yon_menu_window;
typedef struct {
GtkWidget *MenuItemBox;
GtkWidget *MenuButton;
GtkWidget *MenuTextLabel;
GtkWidget *NextIconButton;
char *target;
main_window *widgets;
yon_menu_window *window;
dictionary *children;
} yon_menu_item;
yon_menu_window *yon_menu_window_open(GtkWidget *target, main_window *widgets);
gboolean on_menu_clicked(GtkWidget *, GdkEventButton *, yon_menu_window *);
yon_menu_window *yon_menu_window_new();
yon_menu_item *yon_menu_item_new();
void on_menu_window_size_reallocated(GtkWidget *,GtkAllocation *,yon_menu_window *window);
void on_menu_chosen(GtkWidget *, yon_menu_item *item);
void on_submenu_open(GtkWidget *,yon_menu_item *item);
yon_menu_window *yon_menu_window_new();
void on_menu_window_size_reallocated(GtkWidget *self, GtkAllocation *, yon_menu_window *window);
void on_children_clean(GtkWidget *, yon_menu_window *window);
gboolean yon_on_revealer_switched(yon_menu_window *window);
gboolean on_menu_clicked(GtkWidget *, GdkEventButton *event, yon_menu_window *window);
yon_menu_window *yon_menu_window_open(GtkWidget *, main_window *widgets);
void yon_menu_open_submenu(yon_menu_window *window, yon_menu_item *item);
yon_menu_item *yon_menu_add_item(yon_menu_window *target_menu,const char *id, const char *name, int children);
void yon_menu_ungrab(yon_menu_window *window);
void on_menu_chosen(GtkWidget *, GtkListBoxRow* row, yon_menu_window *window);
void on_children_clean(GtkWidget*, yon_menu_window *window);
gboolean yon_on_revealer_switched (yon_menu_window *window);
void yon_save_window_hide_passwords(template_saving_window *window);

@ -1,69 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-bootloader">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-bootloader.css -->
<object class="GtkBox" id="MenuItemBox">
<object class="GtkListBoxRow" id="MenuItemRow">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="can-focus">True</property>
<child>
<object class="GtkButton" id="MenuButton">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="MenuTextLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<object class="GtkImage" id="ArrowImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="MenuTextLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">label</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="NextIconButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="focus-on-click">False</property>
<property name="receives-default">True</property>
<property name="popup">menu1</property>
<property name="direction">right</property>
<child>
<placeholder/>
</child>
<style>
<class name="thin"/>
<class name="noborder"/>
<class name="nobackground"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.pan-right-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<style>
<class name="noborder"/>
<class name="menunoborder"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<object class="GtkMenu" id="menu1">

@ -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="ubl-settings-bootloader">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-bootloader.css -->
@ -60,6 +60,9 @@
</style>
</object>
</child>
<style>
<class name="listbox_hovering"/>
</style>
</object>
</child>
</object>
@ -166,6 +169,9 @@
<property name="label" translatable="yes">Children options were not found</property>
</object>
</child>
<style>
<class name="listbox_hovering"/>
</style>
</object>
</child>
</object>

Loading…
Cancel
Save