diff --git a/source/libublsettings-gtk3-status.c b/source/libublsettings-gtk3-status.c index 9a2b6d0..254abef 100644 --- a/source/libublsettings-gtk3-status.c +++ b/source/libublsettings-gtk3-status.c @@ -1,6 +1,6 @@ #include "libublsettings-gtk3.h" -static render_data render; +static render_data render = {}; void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) { @@ -24,6 +24,30 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label) } else return 0; } +int yon_status_box_is_set(){ + if (render.box){ + return 1; + } + return 0; +} + +GMutex _render_block_mutex; +gboolean _render_blocked=0; + +void *_yon_ubl_status_box_block_input(int*seconds){ + g_mutex_lock(&_render_block_mutex); + _render_blocked = 1; + g_mutex_unlock(&_render_block_mutex); + sleep(*seconds); + g_mutex_lock(&_render_block_mutex); + _render_blocked = 0; + g_mutex_unlock(&_render_block_mutex); +} + +void yon_ubl_status_box_block_input(int seconds){ + g_thread_new("block_thread",(GThreadFunc)_yon_ubl_status_box_block_input,&seconds); +} + void yon_ubl_status_box_set(BACKGROUND_IMAGE_TYPE type, GtkWidget *box, GtkImage *icon){ GtkIconTheme *ictheme = gtk_icon_theme_get_default(); @@ -61,6 +85,10 @@ void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type) } void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type){ + g_mutex_lock(&_render_block_mutex); + int blocked = _render_blocked; + g_mutex_unlock(&_render_block_mutex); + if (blocked) return; _yon_ubl_status_box_render(text,type); } @@ -81,6 +109,10 @@ gboolean _yon_ubl_status_box_render_thread(struct __yon_ubl_status_box_render_th } void yon_ubl_status_box_render_thread(char *text, BACKGROUND_IMAGE_TYPE type){ + g_mutex_lock(&_render_block_mutex); + int blocked = _render_blocked; + g_mutex_unlock(&_render_block_mutex); + if (blocked) return; struct __yon_ubl_status_box_render_thread_struct *data = malloc(sizeof(struct __yon_ubl_status_box_render_thread_struct)); data->text=yon_char_new(text); data->type=type; @@ -199,6 +231,10 @@ void yon_status_box_destroyed(){ } int yon_ubl_status_box_spawn_infinite(GtkContainer *container, char *status_id, char *display_text, BACKGROUND_IMAGE_TYPE type){ + g_mutex_lock(&_render_block_mutex); + int blocked = _render_blocked; + g_mutex_unlock(&_render_block_mutex); + if (blocked) return 0; // if (!gtk_container_get_children(container)){ if (yon_status_thread_id){ if (!strcmp(yon_status_thread_id,status_id)){ @@ -286,6 +322,10 @@ 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){ + g_mutex_lock(&_render_block_mutex); + int blocked = _render_blocked; + g_mutex_unlock(&_render_block_mutex); + if (blocked) return; if (!gtk_container_get_children(container)){ GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); GtkWidget *revealer = gtk_revealer_new(); diff --git a/source/libublsettings-gtk3-vte.c b/source/libublsettings-gtk3-vte.c index d94f5ea..769a9e9 100644 --- a/source/libublsettings-gtk3-vte.c +++ b/source/libublsettings-gtk3-vte.c @@ -46,9 +46,10 @@ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, voi 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," ; stty -echo; unset PS1;exit 0; exit 0","\n",NULL); + char *install_command=yon_char_unite("tput reset; tput cup 0 0; tput ed; ",command,"; STATUS=$?; stty -echo; unset PS1; exit ${STATUS}","\n",NULL); if(endwork_function) g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); + printf("%s\n",install_command); vte_terminal_spawn_async(VTE_TERMINAL(terminal), VTE_PTY_DEFAULT, NULL, @@ -203,6 +204,13 @@ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, voi val-=2; if (valupper) val=upper; + } default: } gtk_adjustment_set_value(adjustment,val); diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 0e7fe92..3876d09 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -219,6 +219,27 @@ char *yon_packages_get_description(enum YON_PACKAGES_DB_TYPE type, const char *p } } +config_str yon_packages_get_depends(enum YON_PACKAGES_DB_TYPE type, const char *package, int *size){ + (*size)=0; + if (yon_char_is_empty(package)) return NULL; + config_str depends = NULL; + + alpm_list_t *databases = _yon_packages_get_db_list(type); + alpm_list_t *iter = NULL, *pkg_iter = NULL; + for (iter = databases; iter; iter=iter->next){ + alpm_pkg_t *pkg = alpm_db_get_pkg(iter->data,package); + if (!pkg) continue; + alpm_list_t *list = alpm_pkg_compute_requiredby(pkg); + for (pkg_iter = list; pkg_iter; pkg_iter=pkg_iter->next){ + yon_char_parsed_add_or_create_if_exists(depends,size,pkg_iter->data); + + } + break; + } + + return depends; +} + void yon_packages_update(){ if (packages_struct.packages_handle) alpm_release(packages_struct.packages_handle); _yon_packages_get_db(); @@ -287,7 +308,7 @@ struct yon_combo_default_struct { }; void _yon_combo_box_set_default_value(struct yon_combo_default_struct *target){ - gtk_combo_box_text_prepend(target->target,target->command_value,target->default_value); + gtk_combo_box_text_prepend(target->target," ",target->default_value); if (!yon_char_is_empty(target->default_value)) free(target->command); if (!yon_char_is_empty(target->default_value)) free(target->command_value); } diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 49b0a59..c25d819 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -359,6 +359,8 @@ typedef struct { */ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label); +int yon_status_box_is_set(); + /**yon_ubl_status_box_render(render,text,type) * [EN] * Renders message in status box; @@ -376,6 +378,8 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label); */ void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type); +void yon_ubl_status_box_block_input(int seconds); + /**yon_ubl_status_box_render_thread(render,text,type) * [EN] * Renders message in status box. It is safe to use outside of interface thread. @@ -597,6 +601,8 @@ config_str yon_packages_find(enum YON_PACKAGES_DB_TYPE type, const char *search_ char *yon_packages_get_version(enum YON_PACKAGES_DB_TYPE type, const char *package); char *yon_packages_get_description(enum YON_PACKAGES_DB_TYPE type, const char *package); +config_str yon_packages_get_depends(enum YON_PACKAGES_DB_TYPE type, const char *package, int *size); + void yon_combo_box_set_default(GtkComboBoxText *target, char *command, char*(result_callback)(char*)); int yon_ip_mask_get_bits(char *mask);