From 47c90f5e2ee21676a96508053b9f790b0c1ac3e3 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 23 May 2024 14:56:27 +0600 Subject: [PATCH 1/8] Added new tree store functions --- source/libublsettings-gtk3.c | 9 ++++++++- source/libublsettings-gtk3.h | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 74b7115..4b0533a 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -1165,7 +1165,14 @@ void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destinatio } } - +gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter){ + g_return_val_if_fail(GTK_IS_COMBO_BOX(combo),0); + g_return_val_if_fail(GTK_IS_TREE_MODEL(model),0); + const char *id = gtk_combo_box_get_active_id(combo); + if (yon_char_is_empty(id)) return 0; + gtk_tree_model_get_iter_from_string(model,iter,id); + return 1; +} #endif \ No newline at end of file diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 448f428..c11fa39 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -119,6 +119,8 @@ void yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *w */ void yon_window_config_add_custom_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type); +void yon_window_config_add_instant_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type); + /**yon_window_config_erase_custom_parameter(char *param_name, char *section) * [EN] * @@ -463,4 +465,8 @@ dictionary *yon_gtk_tree_store_get_children(GtkTreeStore *tree, GtkTreeIter *par void yon_gtk_tree_store_fill_children(GtkTreeStore *tree, GtkTreeIter *parent, dictionary *data, int column); -void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destination); \ No newline at end of file +void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destination); + +gboolean yon_gtk_tree_store_find_full(GtkTreeModel *model, GtkTreeIter *iter, gint column, const gchar *target); + +gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter); \ No newline at end of file From 9a024a66c5cfacbe3922ff2a5168855a308b3efb Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 28 May 2024 18:05:03 +0600 Subject: [PATCH 2/8] Added calendar popover functions --- source/libublsettings-gtk3.c | 56 ++++++++++++++++++++++++++++++++++++ source/libublsettings-gtk3.h | 6 +++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 4b0533a..4712085 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -1174,5 +1174,61 @@ gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeMode return 1; } +int yon_calendar_set_orientation = 0; +void yon_calendar_set_date_orientation(int orientation){ + yon_calendar_set_orientation = orientation; +} + +void yon_on_date_selected(GtkWidget *self,GtkWidget *target){ + { + if (self){}; + unsigned int year=0, month=0, day=0; + gtk_calendar_get_date(GTK_CALENDAR(self),&year,&month,&day); + char *dy = yon_char_from_int(day); + char *mn = yon_char_from_int(month+1); + char *yr = yon_char_from_int(year); + if (month+1<10) mn = yon_char_append("0",mn); + if (day<10) dy = yon_char_append("0",dy); + + GDateTime *datetime = g_date_time_new_now_local(); + GDateTime *current_datetime = g_date_time_new_local(year,month+1,day,0,0,0); + int comparison = g_date_time_compare(current_datetime,datetime); + if ((comparison <0&&yon_calendar_set_orientation>0)||(comparison>0&&yon_calendar_set_orientation<0)){ + gtk_entry_set_text(GTK_ENTRY(target),g_date_time_format(datetime,"%Y-%m-%d")); + } else { + char *date_string = yon_char_unite(yr,"-",mn,"-",dy,NULL); + gtk_entry_set_text(GTK_ENTRY(target), date_string); + } + free(dy); + free(mn); + free(yr); + } +} + +void yon_on_popover_closed(GtkWidget *self){ + gtk_widget_destroy(self); +} + +void yon_calendar_popover_open(GtkEntry *TargetEntry,GtkWidget *PopupTarget){ + g_return_if_fail(GTK_IS_ENTRY(TargetEntry)); + g_return_if_fail(GTK_IS_WIDGET(PopupTarget)); + GtkWidget *popover = gtk_popover_new(PopupTarget); + GtkWidget *calendar = gtk_calendar_new(); + gtk_container_add(GTK_CONTAINER(popover),calendar); + gtk_widget_show_all(popover); + gtk_popover_popup(GTK_POPOVER(popover)); + + const char *date_str = gtk_entry_get_text(TargetEntry); + if (date_str&&strcmp(date_str,"")){ + int date_size; + config_str date_parsed = yon_char_parse((char*)date_str,&date_size,"-"); + gtk_calendar_select_day(GTK_CALENDAR(calendar),atoi(date_parsed[2])); + gtk_calendar_select_month(GTK_CALENDAR(calendar),atoi(date_parsed[1])-1,atoi(date_parsed[0])); + } + + g_signal_connect(G_OBJECT(calendar),"day-selected",G_CALLBACK(yon_on_date_selected),TargetEntry); + g_signal_connect(G_OBJECT(popover),"closed",G_CALLBACK(yon_on_popover_closed),NULL); + +} #endif \ No newline at end of file diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index c11fa39..ea45a40 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -469,4 +469,8 @@ void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destinatio gboolean yon_gtk_tree_store_find_full(GtkTreeModel *model, GtkTreeIter *iter, gint column, const gchar *target); -gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter); \ No newline at end of file +gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter); + +void yon_calendar_set_date_orientation(int orientation); + +void yon_calendar_popover_open(GtkEntry *TargetEntry,GtkWidget *PopupTarget); \ No newline at end of file From 6ff3b47bd50fec2e9e372472af252fdae4a79a5b Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 29 May 2024 18:08:10 +0600 Subject: [PATCH 3/8] Added function to get last calendar date and time --- source/libublsettings-gtk3.c | 8 ++++++++ source/libublsettings-gtk3.h | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 4712085..1a1a431 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -1176,6 +1176,12 @@ gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeMode int yon_calendar_set_orientation = 0; +int yon_calendar_last_date = 0; + +int yon_calendar_get_last_date(){ + return yon_calendar_last_date; +} + void yon_calendar_set_date_orientation(int orientation){ yon_calendar_set_orientation = orientation; } @@ -1196,9 +1202,11 @@ void yon_on_date_selected(GtkWidget *self,GtkWidget *target){ int comparison = g_date_time_compare(current_datetime,datetime); if ((comparison <0&&yon_calendar_set_orientation>0)||(comparison>0&&yon_calendar_set_orientation<0)){ gtk_entry_set_text(GTK_ENTRY(target),g_date_time_format(datetime,"%Y-%m-%d")); + yon_calendar_last_date = g_date_time_to_unix(datetime); } else { char *date_string = yon_char_unite(yr,"-",mn,"-",dy,NULL); gtk_entry_set_text(GTK_ENTRY(target), date_string); + yon_calendar_last_date = g_date_time_to_unix(current_datetime); } free(dy); free(mn); diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index ea45a40..8c965d7 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -473,4 +473,6 @@ gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeMode void yon_calendar_set_date_orientation(int orientation); -void yon_calendar_popover_open(GtkEntry *TargetEntry,GtkWidget *PopupTarget); \ No newline at end of file +void yon_calendar_popover_open(GtkEntry *TargetEntry,GtkWidget *PopupTarget); + +int yon_calendar_get_last_date(); \ No newline at end of file From f4d757990a1c3deefad43e59e1dc35f45c89e9a7 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 30 May 2024 15:56:04 +0600 Subject: [PATCH 4/8] Added function to save config manually --- source/libublsettings-gtk3.c | 7 +++++++ source/libublsettings-gtk3.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 1a1a431..41aacef 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -201,6 +201,13 @@ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, voi if (!__yon_main_window_config.fullscreen) gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y); } + void yon_window_config_save_instant(){ + check_window_config_setup{ + yon_get_is_fullscreen(); + yon_window_config_save(); + } + } + /**yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event) * [EN] * diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 8c965d7..eb74a4d 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -77,6 +77,8 @@ enum YON_TYPE{ */ #define yon_gtk_builder_get_widget(builder, widget_name) GTK_WIDGET(gtk_builder_get_object(builder, widget_name)) +void yon_window_config_save_instant(); + /**yon_window_config_setup(GtkWindow *window) * [EN] * From e3c0f7db86d2306bad0c28d126ec642153342f9a Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 30 May 2024 18:00:44 +0600 Subject: [PATCH 5/8] Added function for list store entry existing checking --- source/libublsettings-gtk3.c | 13 +++++++++++++ source/libublsettings-gtk3.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 41aacef..a29fde6 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -1181,6 +1181,19 @@ gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeMode return 1; } +gboolean yon_gtk_tree_model_check_exist(GtkTreeModel *model, GtkTreeIter *iter, char *id, int column){ + g_return_val_if_fail(model&>K_IS_TREE_MODEL(model),0); + g_return_val_if_fail(iter,0); + for_iter(model,iter){ + char *check_target; + gtk_tree_model_get(model,iter,column,&check_target,-1); + if (!yon_char_is_empty(check_target)&&!strcmp(id,check_target)){ + return 1; + } + } + return 0; +} + int yon_calendar_set_orientation = 0; int yon_calendar_last_date = 0; diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index eb74a4d..307deec 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -473,6 +473,8 @@ gboolean yon_gtk_tree_store_find_full(GtkTreeModel *model, GtkTreeIter *iter, gi gboolean yon_gtk_tree_iter_get_from_combo_box_id(GtkComboBox *combo, GtkTreeModel *model, GtkTreeIter *iter); +gboolean yon_gtk_tree_model_check_exist(GtkTreeModel *model, GtkTreeIter *iter, char *id, int column); + void yon_calendar_set_date_orientation(int orientation); void yon_calendar_popover_open(GtkEntry *TargetEntry,GtkWidget *PopupTarget); From daa7f9603ea27ac8580d17ea9d7b5355b85c22e6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 10 Jun 2024 11:44:14 +0600 Subject: [PATCH 6/8] Fixed crash while continiously closing windows between calling many status_box_spawn commands --- source/CMakeLists.txt | 2 +- source/libublsettings-gtk3.c | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 457ab14..afd54e0 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -30,7 +30,7 @@ endif() # -O2 -pipe -fno-plt -fexceptions \ # -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ # -fstack-clash-protection -fcf-protection") - +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") add_library(${PROJECT_NAME} SHARED ${PROJECT_NAME}.c ${PROJECT_NAME}.h) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index a29fde6..c8a1aac 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -730,17 +730,16 @@ static char *yon_status_thread_id=NULL; void _yon_ubl_status_box_timed_remove(struct temp_statusbox *statusstruct){ sleep(statusstruct->times); - if (status_thread_busy){ + if (statusstruct->revealer){ gtk_revealer_set_reveal_child(GTK_REVEALER(statusstruct->revealer),0); sleep(1); gtk_widget_destroy(statusstruct->revealer); } - status_thread_busy=0; } -void __yon_ubl_status_box_destroyed(){ - status_thread_busy=0; +void __yon_ubl_status_box_destroyed(GtkWidget *self,struct temp_statusbox *statusstruct){ + statusstruct->revealer=NULL; } void yon_status_box_destroyed(){ @@ -751,7 +750,7 @@ void yon_status_box_destroyed(){ } int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *status_id, char *display_text, BACKGROUND_IMAGE_TYPE type){ - if (!status_thread_busy){ + if (!gtk_container_get_children(container)){ if (yon_status_thread_id){ if (!strcmp(yon_status_thread_id,status_id)){ return 0; @@ -762,7 +761,6 @@ int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *status_id, for (int i=0;irevealer = revealer; } } @@ -829,7 +827,7 @@ int yon_ubl_status_box_despawn_infinite(GtkContainer *container){ } void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int timeout,BACKGROUND_IMAGE_TYPE type){ - if (!status_thread_busy){ + if (!gtk_container_get_children(container)){ GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); GtkWidget *revealer = gtk_revealer_new(); GtkWidget *label = gtk_label_new(""); @@ -843,7 +841,6 @@ void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int ti gtk_widget_show_all(revealer); gtk_revealer_set_reveal_child(GTK_REVEALER(revealer),1); - g_signal_connect(G_OBJECT(revealer),"destroy", G_CALLBACK(__yon_ubl_status_box_destroyed),NULL); gtk_widget_set_margin_bottom(label,9); gtk_widget_set_margin_top(label,9); @@ -868,8 +865,8 @@ void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int ti struct temp_statusbox *statusstruct = malloc(sizeof(struct temp_statusbox)); statusstruct->revealer = revealer; statusstruct->times = timeout; + g_signal_connect(G_OBJECT(revealer),"destroy", G_CALLBACK(__yon_ubl_status_box_destroyed),statusstruct); GThread *thread = g_thread_new("StatusThread",(GThreadFunc)_yon_ubl_status_box_timed_remove,statusstruct); - status_thread_busy=1; } } From 0e23c53f553b4954f62fd2d9740a690eaa0a6409 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 11 Jun 2024 11:37:05 +0600 Subject: [PATCH 7/8] Added window config function for instant parameter erasing --- source/CMakeLists.txt | 2 +- source/libublsettings-gtk3.c | 4 ++++ source/libublsettings-gtk3.h | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index afd54e0..4fe2d98 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -30,7 +30,7 @@ endif() # -O2 -pipe -fno-plt -fexceptions \ # -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ # -fstack-clash-protection -fcf-protection") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") add_library(${PROJECT_NAME} SHARED ${PROJECT_NAME}.c ${PROJECT_NAME}.h) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index c8a1aac..55546aa 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -351,6 +351,10 @@ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, voi param->section=section; yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.deleted_parameters,param->parameter_name,param); } + + void yon_window_config_erase_instant_parameter(char *param_name, char *section){ + g_key_file_remove_key(__yon_window_config_file,section,param_name,NULL); + } int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type){ diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 307deec..632a8f3 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -132,6 +132,8 @@ void yon_window_config_add_instant_parameter(char *param_name, char *section, vo */ void yon_window_config_erase_custom_parameter(char *param_name, char *section); +void yon_window_config_erase_instant_parameter(char *param_name, char *section); + /**yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type) * [EN] * From ac7139ae7b0b356880885ea828dcb0c6785bc128 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 13 Jun 2024 18:01:40 +0600 Subject: [PATCH 8/8] Added new function for spawning terminal window --- source/libublsettings-gtk3.c | 35 +++++++++++++++++++++++++++++++++++ source/libublsettings-gtk3.h | 4 ++++ 2 files changed, 39 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 55546aa..a84f1e0 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -87,6 +87,41 @@ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, voi gtk_widget_show_all(terminal); } + + void __on_yon_terminal_done(GtkWidget *self, void *, GtkWidget *status_box){ + yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(status_box),"terminal_done","",BACKGROUND_IMAGE_SUCCESS_TYPE); + } + + void yon_terminal_window_launch(GtkWindow *parent_window, char *command){ + GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget *header = gtk_header_bar_new(); + GtkWidget *terminal = vte_terminal_new(); + GtkWidget *status_box = gtk_box_new(GTK_ORIENTATION_VERTICAL,5); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL,5); + GtkWidget *terminal_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *scroll = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL,gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(terminal))); + + gtk_window_set_titlebar(GTK_WINDOW(window),header); + gtk_container_add(GTK_CONTAINER(window),box); + gtk_box_pack_start(GTK_BOX(box),status_box,0,0,0); + gtk_box_pack_start(GTK_BOX(box),terminal_box,1,1,0); + gtk_box_pack_start(GTK_BOX(terminal_box),terminal,1,1,0); + gtk_box_pack_start(GTK_BOX(terminal_box),scroll,0,0,0); + gtk_widget_set_margin_bottom(terminal_box,5); + gtk_widget_set_margin_start(terminal_box,5); + gtk_widget_set_margin_end(terminal_box,5); + gtk_widget_show_all(window); + + vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal),-1); + + gtk_window_set_modal(GTK_WINDOW(window),1); + gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header),1); + gtk_window_set_title(GTK_WINDOW(window),gtk_window_get_title(parent_window)); + gtk_window_set_icon_name(GTK_WINDOW(window),gtk_window_get_icon_name(parent_window)); + g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(__on_yon_terminal_done), status_box); + yon_terminal_integrated_start(terminal,command); + } + void yon_gtk_set_scroll(GtkWidget* self,GdkEventScroll *event, GtkAdjustment *adjustment){ if (self){}; gdouble val = gtk_adjustment_get_value(adjustment); diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 632a8f3..012b911 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -42,6 +42,8 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command); */ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); +void yon_terminal_window_launch(GtkWindow *parent_window, char *command); + #endif #define for_iter(model,iter) for(int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model),iter);valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model),iter)) @@ -215,6 +217,8 @@ int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find); */ void yon_gtk_tree_view_minimal_fixed_size_set_full(GtkTreeView *tree); +void yon_gtk_tree_view_set_(GtkTreeView *top,GtkTreeView *resizing, ...); + /**yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...) * [EN] *