From 5879b14c2dc6353e66d2f82e015f9ddb13955efb Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 17 Jan 2025 18:02:04 +0600 Subject: [PATCH] Added revealer shrinking function WIP --- source/libublsettings-gtk3-misc.c | 36 +++++++++++++++++++++++++++++++ source/libublsettings-gtk3.h | 4 +++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3-misc.c b/source/libublsettings-gtk3-misc.c index 5464dda..24160c7 100644 --- a/source/libublsettings-gtk3-misc.c +++ b/source/libublsettings-gtk3-misc.c @@ -325,4 +325,40 @@ void yon_on_insert_custom_restricted_check(GtkEditable *editable, const gchar *t void yon_gtk_entry_block_symbols(GtkEntry *target, char *symbols){ g_return_if_fail(GTK_IS_ENTRY(target)); g_signal_connect(G_OBJECT(target),"insert-text",G_CALLBACK(yon_on_insert_custom_restricted_check),yon_char_new(symbols)); +} + +void _yon_on_gtk_revealer_set_from_switch(GtkSwitch *target, int status, GtkRevealer *revealer){ + gtk_revealer_set_reveal_child(revealer,status); + gtk_revealer_set_transition_type(revealer,status?GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN:GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP); +} + +void yon_gtk_revealer_set_from_switch(GtkRevealer *revealer, GtkSwitch *target){ + g_return_if_fail(GTK_IS_REVEALER(revealer)&>K_IS_SWITCH(target)); + g_signal_connect(G_OBJECT(target),"state-set",G_CALLBACK(_yon_on_gtk_revealer_set_from_switch),revealer); +} + +struct revealer_wrapper { + GtkWidget *revealer; + GtkWidget *window; + int height; +}; + +gboolean _yon_on_revealer_hidden(struct revealer_wrapper *wrapped){ + gtk_window_resize +} + +gboolean _yon_on_revealer_switched(struct revealer_wrapper *wrapped){ + if (!gtk_revealer_get_child_revealed(GTK_REVEALER(wrapped->revealer))){ + g_timeout_add(gtk_revealer_get_transition_duration(GTK_REVEALER(wrapped->revealer))+1,(GSourceFunc)_yon_on_revealer_hidden,wrapped); + } +} + +yon_gtk_window_set_shrinking_from_revealer_resizing(GtkWindow *window, GtkRevealer *revealer){ + int height=0; + gtk_window_get_size(window, NULL, &height); + struct revealer_wrapper *wrapped = malloc(sizeof(struct revealer_wrapper)); + wrapped->revealer=revealer; + wrapped->height=height; + wrapped->window=gtk_widget_get_toplevel(GTK_WIDGET(revealer)); + g_signal_connect(G_OBJECT(wrapped->revealer),"notify::reveal-child",G_CALLBACK(_yon_on_revealer_switched),wrapped); } \ No newline at end of file diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 1711023..8346806 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -519,4 +519,6 @@ void yon_calendar_popover_open(GtkEntry *TargetEntry,GtkWidget *PopupTarget); int yon_calendar_get_last_date(); -config_str yon_resource_open_file(const char *path, int *size); \ No newline at end of file +config_str yon_resource_open_file(const char *path, int *size); + +void yon_gtk_revealer_set_from_switch(GtkRevealer *revealer, GtkSwitch *target); \ No newline at end of file