From d8c1b72e80667877181049dca5b51b7435093978 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 24 Oct 2025 17:12:38 +0600 Subject: [PATCH] About window fix; Documentation window fix --- source/ubinstall-gtk.c | 132 +++++++++++++++++++++++++++++++++++++++++ source/ubinstall-gtk.h | 3 +- 2 files changed, 134 insertions(+), 1 deletion(-) diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index dcb080a..1a98232 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -1,6 +1,135 @@ #include "ubinstall-gtk.h" config main_config; +void yon_open_browser(GtkWidget *, char *link){ + GtkWidget *window = yon_ubl_browser_window_open(link,TITLE_LABEL); + if (window) + gtk_window_set_icon_name(GTK_WINDOW(window),yon_char_append("com.ublinux.",LocaleName)); +} + +void on_open_documentation_confirmation(GtkWidget *self, char *link){ + if (template_app_information.always_open_documentation==0){ + GtkBuilder *builder = gtk_builder_new_from_resource(ui_glade_path_documentation); + template_documentation_confirmation_window *window = malloc(sizeof(template_documentation_confirmation_window)); + window->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton"); + window->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton"); + window->HeaderLabel = yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); + window->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox"); + gtk_label_set_text(GTK_LABEL(window->HeaderLabel),TITLE_LABEL); + gtk_window_set_title(GTK_WINDOW(window->Window),TITLE_LABEL); + gtk_window_set_icon_name(GTK_WINDOW(window->Window),yon_char_append("com.ublinux.",LocaleName)); + gtk_widget_show_all(window->Window); + g_signal_connect(G_OBJECT(window->CloseButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link)); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + + + } else { + yon_open_browser(self,link); + } +} + +/**on_link(GtkWidget *self, char* uri, gpointer user_data) + * [EN] + * Signal for hadnling AboutDialog links. + * Connect to "activate-link" signal. + * [self] is AboutDialog window; + * [uri] is activated link; + * [user_data] is pointer for user data, hasn't used in standard handler; + * [RU] + * Функция для обработки сигнала нажатия на ссылку окна AboutDialog. + * Присоединять к сигналу "activate-link". + * [self] - окно AboutDialog; + * [uri] - ссылка, по которой совершается переход; + * [user_data] - указатель на любые другие данные, не используется в стандартном обработчике; +*/ +void on_link(GtkWidget *self, char* uri, gpointer ){ + gtk_widget_destroy(self); + on_open_documentation_confirmation(self,uri); +} + +void on_about(GtkWidget *, char *version_application){ + GtkBuilder *builder=gtk_builder_new_from_resource(ui_glade_path_about); + GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow"); + GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic"); + GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide"); + gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application); + gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL); + gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(window),yon_char_append("com.ublinux.",LocaleName)); + gtk_window_set_icon_name(GTK_WINDOW(window),yon_char_append("com.ublinux.",LocaleName)); + char *title_str = about_label(TITLE_LABEL); + gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(window),LocaleName); + gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL); + g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL); + gtk_widget_set_visible(hideButtonBox,0); + gtk_widget_destroy(hideButtonBox); + gtk_window_set_title(GTK_WINDOW(window),title_str); + gtk_widget_show(window); +} + +//functions + + +int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data){ + textdomain(template_ui_LocaleName); + GtkWidget *dialog = gtk_dialog_new_with_buttons(TITLE_LABEL,GTK_WINDOW(gtk_widget_get_toplevel(self)),GTK_DIALOG_USE_HEADER_BAR,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL); + textdomain(LocaleName); + gtk_window_set_modal(GTK_WINDOW(dialog),1); + gtk_window_set_icon_name(GTK_WINDOW(dialog),yon_char_append("com.ublinux.",LocaleName)); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); + gtk_widget_set_size_request(dialog,450,-1); + GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_dialog_get_header_bar(GTK_DIALOG(dialog)))); + GtkWidget *image_cancel = gtk_image_new_from_icon_name("com.ublinux.libublsettingsui-gtk3.cancel-symbolic",GTK_ICON_SIZE_BUTTON); + GtkWidget *image_accept = gtk_image_new_from_icon_name("com.ublinux.libublsettingsui-gtk3.accept-symbolic",GTK_ICON_SIZE_BUTTON); + gtk_button_set_image((GtkButton*)g_list_nth_data(list,0),image_cancel); + gtk_button_set_image((GtkButton*)g_list_nth_data(list,1),image_accept); + gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(list,0)),"marginright"); + gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(list,1)),"marginright"); + + g_list_free(list); + GtkWidget *header_label = gtk_label_new(yon_char_is_empty(data->title)?TITLE_LABEL:data->title); + gtk_widget_show(header_label); + PangoAttrList *attributes = pango_attr_list_new(); + PangoAttribute *boldAttr = pango_attr_weight_new(PANGO_WEIGHT_BOLD); + pango_attr_list_insert(attributes, boldAttr); + gtk_label_set_attributes(GTK_LABEL(header_label),attributes); + + GtkWidget *header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); + gtk_header_bar_set_custom_title(GTK_HEADER_BAR(header),header_label); + gtk_widget_show(header); + + GtkWidget *image = gtk_image_new_from_icon_name("dialog-question-symbolic",GTK_ICON_SIZE_DIALOG); + gtk_widget_show(image); + gtk_widget_set_margin_start(image,20); + gtk_widget_set_margin_end(image,20); + gtk_widget_set_margin_bottom(image,20); + gtk_widget_set_margin_top(image,20); + + GtkWidget *label = gtk_label_new(""); + gtk_widget_set_margin_end(label,20); + gtk_widget_show(label); + gtk_label_set_line_wrap_mode(GTK_LABEL(label),PANGO_WRAP_WORD); + gtk_label_set_line_wrap(GTK_LABEL(label),1); + gtk_label_set_markup(GTK_LABEL(label),data->action_text); + + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + gtk_widget_show(box); + gtk_box_pack_start(GTK_BOX(box),image,0,0,5); + gtk_box_pack_start(GTK_BOX(box),label,0,0,5); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),box,1,1,5); + + gtk_window_set_default_size(GTK_WINDOW(dialog),450,-1); + + int resp = gtk_dialog_run(GTK_DIALOG(dialog)); + if (resp == GTK_RESPONSE_ACCEPT){ + if (data->function){ + data->function(NULL,data->data); + } + } else resp=0; + gtk_widget_destroy(dialog); + return resp; +} // //functions // void yon_encryption_type_setup(GtkComboBoxText *target){ @@ -933,6 +1062,9 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets); g_signal_connect(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),"changed",G_CALLBACK(on_advanced_virtual_device_changed),widgets); + g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),widgets); + g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),widgets); + gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),(GtkTreeModelFilterVisibleFunc)on_country_filter,widgets,NULL); { diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index cdeb5ea..70f88be 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1197,4 +1197,5 @@ void yon_advanced_section_remove_by_name(char *part); void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets); int yon_advanced_section_append(advanced_section *section); gboolean on_format_changed(GtkWidget *self, gboolean state, advanced_partition *part); -int yon_layouts_get(); \ No newline at end of file +int yon_layouts_get(); +void on_link(GtkWidget *self, char* uri, gpointer ); \ No newline at end of file