From 95679e5897534c288d8d2d7e551b6b5b9f30e200 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 27 Mar 2024 18:13:12 +0600 Subject: [PATCH 1/4] Changed logic of RMB menu function creating; Added function to set scroll widget for specific scrollbar --- source/libublsettings-gtk3.c | 73 +++++++++++++++++++++++++----------- source/libublsettings-gtk3.h | 10 ++++- 2 files changed, 60 insertions(+), 23 deletions(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 53211d3..32b499d 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -100,6 +100,31 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); gtk_widget_show_all(terminal); } + + void yon_gtk_set_scroll(GtkWidget* self,GdkEventScroll *event, GtkAdjustment *adjustment){ + if (self){}; + gdouble val = gtk_adjustment_get_value(adjustment); + gdouble lower = gtk_adjustment_get_lower(adjustment); + gdouble upper = gtk_adjustment_get_upper(adjustment); + switch (event->direction){ + case GDK_SCROLL_DOWN: + val+=2; + if (val>upper) val=upper; + break; + case GDK_SCROLL_UP: + val-=2; + if (valshow_function); - if (func(window->show_data)){ + if (!func||func(window->show_data)){ if (self){}; if (event->button==3){ @@ -979,28 +1004,32 @@ rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (show_function GCallback current_function; gpointer *current_data; while ((current_label=va_arg(list,const char*))){ - current_icon=va_arg(list,const char*); - current_function=va_arg(list,GCallback); - current_data=va_arg(list,gpointer); - GtkWidget *menu_item = gtk_menu_item_new(); - GtkWidget *content_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); - gtk_container_add(GTK_CONTAINER(menu_item),content_box); - - GtkWidget *image=NULL; - if (!yon_char_is_empty(current_icon)){ - image=gtk_image_new_from_icon_name(current_icon,GTK_ICON_SIZE_BUTTON); - gtk_box_pack_start(GTK_BOX(content_box),image,0,0,0); - gtk_widget_show(image); + if (current_label){ + current_icon=va_arg(list,const char*); + current_function=va_arg(list,GCallback); + current_data=va_arg(list,gpointer); + GtkWidget *menu_item = gtk_menu_item_new(); + GtkWidget *content_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + gtk_container_add(GTK_CONTAINER(menu_item),content_box); + + GtkWidget *image=NULL; + if (!yon_char_is_empty(current_icon)){ + image=gtk_image_new_from_icon_name(current_icon,GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start(GTK_BOX(content_box),image,0,0,0); + gtk_widget_show(image); + } + + GtkWidget *label = gtk_label_new(current_label); + gtk_box_pack_start(GTK_BOX(content_box),label,0,0,0); + + if (current_function){ + g_signal_connect(G_OBJECT(menu_item),"activate",current_function,current_data); + } else { + } + yon_dictionary_add_or_create_if_exists_with_data(window->buttons,(char*)current_label,menu_item); + gtk_menu_shell_append(GTK_MENU_SHELL(window->menu),menu_item); + gtk_widget_show(menu_item); } - - GtkWidget *label = gtk_label_new(current_label); - gtk_box_pack_start(GTK_BOX(content_box),label,0,0,0); - - if (current_function){ - g_signal_connect(G_OBJECT(menu_item),"activate",current_function,current_data); - } - yon_dictionary_add_or_create_if_exists_with_data(window->buttons,(char*)current_label,menu_item); - gtk_menu_shell_append(GTK_MENU_SHELL(window->menu),menu_item); } g_signal_connect(G_OBJECT(target_widget),"button-press-event",G_CALLBACK(on_rmb_menu_open),window); return window; diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 72625b1..fbb7cc2 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -29,12 +29,20 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi * after terminal done its work [endwork_function] is called with [endwork_function_argument] argument. * [RU] * Запускает терминал с командой [command], - * терминал добавляется в контейнер [place_to_show] виджета, * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument]. */ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); #endif + +/**yon_gtk_widget_set_scroll_window_for_scroll(GtkWidget *target, GtkScrollbar *scroll) + * [EN] + * + * [RU] + * Устанавливает для виджета [target] прокрутку скролла [scroll] +*/ +void yon_gtk_widget_set_scroll_window_for_scroll(GtkWidget *target, GtkScrollbar *scroll); + /**YON_TYPE * [EN] * From f795bc6d1c1b586e5bbe6d8fb8f93252301b3500 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 28 Mar 2024 18:08:09 +0600 Subject: [PATCH 2/4] Added logic for menu buttons sensitivity --- source/libublsettings-gtk3.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 32b499d..0e69636 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -994,6 +994,8 @@ rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (show_function if (function){ g_signal_connect(G_OBJECT(menu_item),"activate",function,data); + } else { + gtk_widget_set_sensitive(menu_item,0); } yon_dictionary_add_or_create_if_exists_with_data(window->buttons,(char*)button_label,menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(window->menu),menu_item); @@ -1025,6 +1027,7 @@ rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (show_function if (current_function){ g_signal_connect(G_OBJECT(menu_item),"activate",current_function,current_data); } else { + gtk_widget_set_sensitive(menu_item,0); } yon_dictionary_add_or_create_if_exists_with_data(window->buttons,(char*)current_label,menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(window->menu),menu_item); From ded05cd76b9ad01e3f8a7136ae68ae194af2caa6 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 1 Apr 2024 12:12:19 +0600 Subject: [PATCH 3/4] If integer from window config equals 0, it replaces with -1 --- source/libublsettings-gtk3.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 0e69636..95c78dc 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -282,7 +282,9 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end g_value_set_string(val,g_key_file_get_string(__yon_window_config_file,"window",param->parameter_name, NULL)); break; case YON_TYPE_INT: - g_value_set_int(val,g_key_file_get_integer(__yon_window_config_file,"window",param->parameter_name, NULL)); + int output = g_key_file_get_integer(__yon_window_config_file,"window",param->parameter_name, NULL); + if (!output) output=-1; + g_value_set_int(val,output); break; case YON_TYPE_BOOLEAN: gboolean res = g_key_file_get_boolean(__yon_window_config_file,"window",param->parameter_name, NULL); From 2f1e158d325bb660960f599ccc076cd4b9ae5a65 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 5 Apr 2024 17:55:14 +0600 Subject: [PATCH 4/4] Removed 'sleep 5' from terminal starting function --- source/libublsettings-gtk3.c | 41 +++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 95c78dc..063a84a 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -69,7 +69,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); - char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed && ",command," ; sleep 5; stty -echo; unset PS1","\n",NULL); + char *install_command=yon_char_unite("clear;tput cup 0 0 && tput ed && ",command," ; stty -echo; unset PS1","\n",NULL); if(endwork_function) g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); vte_terminal_spawn_async(VTE_TERMINAL(terminal), @@ -359,6 +359,7 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.deleted_parameters,param->parameter_name,param); } + int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type){ GError *err=NULL; switch (type){ @@ -1040,4 +1041,42 @@ rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (show_function return window; } } + +// GtkEntry section +// struct entry_pattern_data { +// GtkEntry *entry; +// char *pattern; // %d %s +// }; + +// char *yon_gtk_entry_pattern_format(GtkWidget *target, struct entry_pattern_data *data){ +// if (target){ +// const char *entry_data = gtk_entry_get_text(target); +// int next_track=0; +// for (int i=0; ipattern);i++){ +// char target_letter=-1; +// target_letter = ; +// switch (data->pattern[i]){ +// case '%':next_track=1; +// break; +// case 'd':if (next_track){ + +// } +// break; +// case 's': +// break; +// default: + +// } +// } + +// }; +// } + +// void yon_gtk_entry_set_pattern(GtkEntry *entry, char *pattern){ +// struct entry_pattern_data *data = malloc(sizeof(struct entry_pattern_data)); +// data->entry=entry; +// data->pattern=pattern; +// char *current_text = gtk_entry_get_text(entry); + +// } #endif \ No newline at end of file