From ac4fa6d6d57d0a3bb5407bd432f7c03184f85d45 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 18 Jan 2024 12:37:14 +0600 Subject: [PATCH 1/6] Custom status boxes have wrapped labels --- source/libublsettings-gtk3.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 30b1934..df4d520 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -681,6 +681,8 @@ int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *display_tex GtkWidget *revealer = gtk_revealer_new(); GtkWidget *label = gtk_label_new(""); GtkWidget *icon = gtk_image_new(); + gtk_label_set_line_wrap(GTK_LABEL(label),1); + gtk_label_set_line_wrap_mode(GTK_LABEL(label),PANGO_WRAP_WORD); gtk_container_add(GTK_CONTAINER(revealer),box); gtk_box_pack_start(GTK_BOX(box),icon,0,0,5); gtk_box_pack_start(GTK_BOX(box),label,0,0,5); @@ -752,6 +754,8 @@ void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int ti GtkWidget *revealer = gtk_revealer_new(); GtkWidget *label = gtk_label_new(""); GtkWidget *icon = gtk_image_new(); + gtk_label_set_line_wrap(GTK_LABEL(label),1); + gtk_label_set_line_wrap_mode(GTK_LABEL(label),PANGO_WRAP_WORD); gtk_container_add(GTK_CONTAINER(revealer),box); gtk_box_pack_start(GTK_BOX(box),icon,0,0,5); gtk_box_pack_start(GTK_BOX(box),label,0,0,5); -- 2.35.1 From 6557ec83eed50f524c45eff8bea431d67da3be73 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 22 Jan 2024 09:18:46 +0600 Subject: [PATCH 2/6] Added new functions --- source/libublsettings-gtk3.c | 12 ++++++++++++ source/libublsettings-gtk3.h | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index df4d520..5c3bf9e 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -569,6 +569,18 @@ void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, G gtk_widget_set_sensitive(target,!gtk_combo_box_get_active(toggle)>0 ? 0 : 1); } +void yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed(GtkToggleButton *self, GtkToggleButton *target){ + if (gtk_toggle_button_get_active(self)){ + gtk_toggle_button_set_active(target,0); + } +} + +void yon_gtk_toggle_button_set_inactive_from_toggle_button(GtkToggleButton *self, GtkToggleButton *target){ + if (!gtk_toggle_button_get_active(self)){ + gtk_toggle_button_set_active(target,0); + } +} + void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) { gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head); diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 7dbf32f..af95bde 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -248,6 +248,23 @@ void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget */ void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target); +/**yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed(GtkToggleButton *self, GtkToggleButton *target) + * [EN] + * + * [RU] + * Выставляет активность переключателя [target] на 0 когда переключатель [self] не равен 0. +*/ +void yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed(GtkToggleButton *self, GtkToggleButton *target); + + +/**yon_gtk_toggle_button_set_inactive_from_toggle_button(GtkToggleButton *self, GtkToggleButton *target) + * [EN] + * + * [RU] + * Выставляет активность переключателя [target] на 0 когда переключатель [self] сам равен 0. +*/ +void yon_gtk_toggle_button_set_inactive_from_toggle_button(GtkToggleButton *self, GtkToggleButton *target); + typedef enum { BACKGROUND_IMAGE_SUCCESS_TYPE, -- 2.35.1 From 976791a5e6b213196774e337120291102dcabd4e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 22 Jan 2024 11:10:13 +0600 Subject: [PATCH 3/6] Status renderer function redone --- source/libublsettings-gtk3.c | 77 +++++++++++++++--------------------- source/libublsettings-gtk3.h | 1 + 2 files changed, 32 insertions(+), 46 deletions(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 5c3bf9e..1331706 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -603,28 +603,38 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label) } else return 0; } +void yon_ubl_status_box_set(BACKGROUND_IMAGE_TYPE type, GtkWidget *box, GtkImage *icon){ + + GtkIconTheme *ictheme = gtk_icon_theme_get_default(); + switch (type){ + case BACKGROUND_IMAGE_SUCCESS_TYPE: + { + gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessError"); + gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); + gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.libublsettingsui-gtk3.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); + } + break; + case BACKGROUND_IMAGE_FAIL_TYPE: + { + gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); + gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessError"); + gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.libublsettingsui-gtk3.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); + } + break; + case BACKGROUND_IMAGE_INFO_TYPE: + { + gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessError"); + gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); + gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.libublsettingsui-gtk3.important", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); + } + break; + } +} + void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type) { render_data data = render; - GtkIconTheme *ictheme = gtk_icon_theme_get_default(); - GError *err = NULL; - if (err) - { - printf("%s\n", err->message); - g_error_free(err); - } - if (type == BACKGROUND_IMAGE_SUCCESS_TYPE||! type) - { - gtk_style_context_remove_class(gtk_widget_get_style_context(data.box), "boxInfoMessError"); - gtk_style_context_add_class(gtk_widget_get_style_context(data.box), "boxInfoMessOK"); - gtk_image_set_from_pixbuf(GTK_IMAGE(data.icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); - } - else if (type == BACKGROUND_IMAGE_FAIL_TYPE) - { - gtk_style_context_remove_class(gtk_widget_get_style_context(data.box), "boxInfoMessOK"); - gtk_style_context_add_class(gtk_widget_get_style_context(data.box), "boxInfoMessError"); - gtk_image_set_from_pixbuf(GTK_IMAGE(data.icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); - } + yon_ubl_status_box_set(type,data.box,GTK_IMAGE(data.icon)); if (text) gtk_label_set_text(GTK_LABEL(data.label), text); } @@ -720,20 +730,7 @@ int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *display_tex (int)(textColor.blue * 65535) ); pango_attr_list_insert(attributes, colorAttr); - - GtkIconTheme *ictheme = gtk_icon_theme_get_default(); - if (type == BACKGROUND_IMAGE_SUCCESS_TYPE||! type) - { - gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessError"); - gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); - gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-logging.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); - } - else if (type == BACKGROUND_IMAGE_FAIL_TYPE) - { - gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); - gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessError"); - gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-logging.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); - } + yon_ubl_status_box_set(type,box,GTK_IMAGE(icon)); if (display_text) gtk_label_set_text(GTK_LABEL(label),display_text); struct temp_statusbox *statusstruct = malloc(sizeof(struct temp_statusbox)); @@ -794,19 +791,7 @@ void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int ti ); pango_attr_list_insert(attributes, colorAttr); - GtkIconTheme *ictheme = gtk_icon_theme_get_default(); - if (type == BACKGROUND_IMAGE_SUCCESS_TYPE||! type) - { - gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessError"); - gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); - gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-logging.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); - } - else if (type == BACKGROUND_IMAGE_FAIL_TYPE) - { - gtk_style_context_remove_class(gtk_widget_get_style_context(box), "boxInfoMessOK"); - gtk_style_context_add_class(gtk_widget_get_style_context(box), "boxInfoMessError"); - gtk_image_set_from_pixbuf(GTK_IMAGE(icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-logging.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, NULL)); - } + yon_ubl_status_box_set(type,box,GTK_IMAGE(icon)); if (display_text) gtk_label_set_text(GTK_LABEL(label),display_text); struct temp_statusbox *statusstruct = malloc(sizeof(struct temp_statusbox)); diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index af95bde..c0e0193 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -267,6 +267,7 @@ void yon_gtk_toggle_button_set_inactive_from_toggle_button(GtkToggleButton *self typedef enum { + BACKGROUND_IMAGE_INFO_TYPE, BACKGROUND_IMAGE_SUCCESS_TYPE, BACKGROUND_IMAGE_FAIL_TYPE } BACKGROUND_IMAGE_TYPE; -- 2.35.1 From 6ca41f67602b0c6e34a2be641939c70e8d9d9d79 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 23 Jan 2024 09:20:43 +0600 Subject: [PATCH 4/6] Fixed margin --- source/libublsettings-gtk3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 1331706..5fb6ace 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -707,7 +707,7 @@ int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *display_tex gtk_label_set_line_wrap_mode(GTK_LABEL(label),PANGO_WRAP_WORD); gtk_container_add(GTK_CONTAINER(revealer),box); gtk_box_pack_start(GTK_BOX(box),icon,0,0,5); - gtk_box_pack_start(GTK_BOX(box),label,0,0,5); + gtk_box_pack_start(GTK_BOX(box),label,0,0,0); gtk_container_add(container,revealer); gtk_widget_show_all(revealer); -- 2.35.1 From 5c71bed891f6cc1e427755bf9827f2c3865d3394 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 23 Jan 2024 13:32:27 +0600 Subject: [PATCH 5/6] Changed spawned infinite status box open/close logic --- source/libublsettings-gtk3.c | 30 ++++++++++++++++++++++++++++-- source/libublsettings-gtk3.h | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 5fb6ace..96a00bf 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -682,6 +682,8 @@ struct temp_statusbox { GtkWidget *revealer; }; +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){ @@ -697,12 +699,33 @@ void __yon_ubl_status_box_destroyed(){ status_thread_busy=0; } -int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *display_text, BACKGROUND_IMAGE_TYPE type){ +void yon_status_box_destroyed(){ + if (yon_status_thread_id){ + free(yon_status_thread_id); + yon_status_thread_id=NULL; + } +} + +int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *status_id, char *display_text, BACKGROUND_IMAGE_TYPE type){ if (!status_thread_busy){ + if (yon_status_thread_id){ + if (!strcmp(yon_status_thread_id,status_id)){ + return 0; + } + free(yon_status_thread_id); + GList *list = gtk_container_get_children(container); + for (int i=0;irevealer = revealer; - status_thread_busy=2; } } int _yon_ubl_status_box_despawn_infinite(GtkContainer *container){ + if (yon_status_thread_id){ + free(yon_status_thread_id); + yon_status_thread_id=NULL; + } GList *list = gtk_container_get_children(container); for (int i=0; i Date: Fri, 26 Jan 2024 10:58:51 +0600 Subject: [PATCH 6/6] fixed infinite status box calling --- source/libublsettings-gtk3.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 96a00bf..525a907 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -713,6 +713,7 @@ int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *status_id, return 0; } free(yon_status_thread_id); + yon_status_thread_id=NULL; GList *list = gtk_container_get_children(container); for (int i=0;i