parent
387556f912
commit
ac83d890c7
@ -0,0 +1,116 @@
|
||||
#include "ubl-settings-bootloader.h"
|
||||
|
||||
|
||||
|
||||
void on_menu_chosen(GtkWidget *,dictionary *){
|
||||
|
||||
}
|
||||
|
||||
void on_submenu_open(GtkWidget *,dictionary *dict){
|
||||
yon_menu_window *window = yon_dictionary_get_data(dict->first,yon_menu_window*);
|
||||
yon_menu_item *item = yon_dictionary_get_data(dict->first->next,yon_menu_item*);
|
||||
dictionary *dact = NULL;
|
||||
for_dictionaries(dact,item->children){
|
||||
yon_menu_item *child = yon_dictionary_get_data(dact,yon_menu_item*);
|
||||
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),item);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
yon_menu_window *yon_menu_window_open(GtkWidget *, main_window *widgets){
|
||||
yon_menu_window *window = yon_menu_window_new();
|
||||
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],¶m_size,">");
|
||||
if (yon_dictionary_get(&window->menu_items,parameter[0])){
|
||||
|
||||
} else {
|
||||
yon_menu_item *item = yon_menu_item_new();
|
||||
gtk_widget_hide(item->NextIconButton);
|
||||
gtk_label_set_text(GTK_LABEL(item->MenuTextLabel),parameter[0]);
|
||||
item->target=yon_char_new(parameter[0]);
|
||||
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 (size==2){
|
||||
yon_menu_item *item_child = yon_menu_item_new();
|
||||
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 {
|
||||
g_signal_connect(G_OBJECT(item->MenuButton),"clicked",G_CALLBACK(on_menu_chosen),item);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
int x,y,x2,y2,width;
|
||||
gdk_window_get_position(gtk_widget_get_window(widgets->MenuButton),&x,&y);
|
||||
gtk_widget_translate_coordinates(widgets->MenuButton,widgets->Window,x,y,&x2,&y2);
|
||||
gtk_window_get_size(GTK_WINDOW(window->MenuWindow),&width,NULL);
|
||||
gtk_window_get_position(GTK_WINDOW(widgets->Window),&x,&y);
|
||||
gtk_window_move(GTK_WINDOW(window->MenuWindow),x+x2-width,y+y2);
|
||||
gtk_widget_realize(window->MenuWindow);
|
||||
gtk_widget_show(window->MenuWindow);
|
||||
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);
|
||||
return window;
|
||||
}
|
||||
|
||||
gboolean on_menu_clicked(GtkWidget *, GdkEventButton *event, yon_menu_window *window){
|
||||
int x,y,width,height;
|
||||
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);
|
||||
gdk_seat_ungrab(seat);
|
||||
// gtk_grab_remove(widget);
|
||||
gtk_widget_destroy(window->MenuWindow);
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
void on_children_clean(GtkWidget*, yon_menu_window *window){
|
||||
GList *list = gtk_container_get_children(GTK_CONTAINER(window->ChildrenListBox));
|
||||
for (guint i=0;i<g_list_length(list);i++){
|
||||
GList *item = gtk_container_get_children(GTK_CONTAINER(list->data));
|
||||
g_object_ref(G_OBJECT(item->data));
|
||||
gtk_container_remove(GTK_CONTAINER(list->data),GTK_WIDGET(item->data));
|
||||
gtk_widget_destroy(GTK_WIDGET(list->data));
|
||||
g_list_free(item);
|
||||
list=list->next;
|
||||
}
|
||||
}
|
||||
|
||||
yon_menu_window *yon_menu_window_new(){
|
||||
yon_menu_window *window = new(yon_menu_window);
|
||||
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_menu_window);
|
||||
window->MenuWindow = yon_gtk_builder_get_widget(builder,"MainWindow");
|
||||
window->ItemsRevealer = yon_gtk_builder_get_widget(builder,"ItemsRevealer");
|
||||
window->BackButton = yon_gtk_builder_get_widget(builder,"BackButton");
|
||||
window->ItemsListBox = yon_gtk_builder_get_widget(builder,"ItemsListBox");
|
||||
window->ChildrenRevealer = yon_gtk_builder_get_widget(builder,"ChildrenRevealer");
|
||||
window->ChildrenListBox = yon_gtk_builder_get_widget(builder,"ChildrenListBox");
|
||||
|
||||
window->menu_items=NULL;
|
||||
|
||||
g_signal_connect(G_OBJECT(window->BackButton),"clicked",G_CALLBACK(on_children_clean),window);
|
||||
g_signal_connect(G_OBJECT(window->MenuWindow),"button-press-event",G_CALLBACK(on_menu_clicked),window);
|
||||
return window;
|
||||
}
|
||||
|
||||
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->MenuTextLabel = yon_gtk_builder_get_widget(builder,"MenuTextLabel");
|
||||
item->NextIconButton = yon_gtk_builder_get_widget(builder,"NextIconButton");
|
||||
item->children=NULL;
|
||||
|
||||
return item;
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.38.2 -->
|
||||
<interface domain="ubl-settings-bootloader">
|
||||
<requires lib="gtk+" version="3.24"/>
|
||||
<!-- interface-css-provider-path ubl-settings-bootloader.css -->
|
||||
<object class="GtkBox" id="MenuItemBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="MenuButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="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>
|
||||
</object>
|
||||
</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">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
</object>
|
||||
</interface>
|
||||
@ -0,0 +1,174 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.38.2 -->
|
||||
<interface domain="ubl-settings-bootloader">
|
||||
<requires lib="gtk+" version="3.24"/>
|
||||
<!-- interface-css-provider-path ubl-settings-bootloader.css -->
|
||||
<object class="GtkWindow" id="MainWindow">
|
||||
<property name="width-request">450</property>
|
||||
<property name="height-request">250</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="default-width">450</property>
|
||||
<property name="icon-name">com.ublinux.ubl-settings-bootloader</property>
|
||||
<property name="skip-taskbar-hint">True</property>
|
||||
<property name="skip-pager-hint">True</property>
|
||||
<property name="decorated">False</property>
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label-xalign">0</property>
|
||||
<property name="shadow-type">in</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="margin-start">5</property>
|
||||
<property name="margin-end">5</property>
|
||||
<property name="margin-top">5</property>
|
||||
<property name="margin-bottom">5</property>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="ItemsRevealer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="transition-type">none</property>
|
||||
<property name="reveal-child">True</property>
|
||||
<child>
|
||||
<object class="GtkListBox" id="ItemsListBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="selection-mode">none</property>
|
||||
<child type="placeholder">
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">OS options were not found</property>
|
||||
<style>
|
||||
<class name="workingbg"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="workingbg"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="ChildrenRevealer">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="transition-type">none</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="BackButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="receives-default">True</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<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="direction">left</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="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="MenuTextLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Back</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="noborder"/>
|
||||
<class name="menunoborder"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkListBox" id="ChildrenListBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="selection-mode">none</property>
|
||||
<child type="placeholder">
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="label" translatable="yes">Children options were not found</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="workingbg"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label_item">
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="workingbg"/>
|
||||
</style>
|
||||
</object>
|
||||
</interface>
|
||||
Loading…
Reference in new issue