@ -63,7 +63,7 @@ void on_password_accept(GtkWidget *self, dictionary *dict){
ubl_settings_usergroups_password_window * window = yon_dictionary_get_data ( dict - > first , ubl_settings_usergroups_password_window * ) ;
GtkEntry * entry = yon_dictionary_get_data ( dict - > first - > next , GtkEntry * ) ;
char * password = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > PasswordEntry ) ) ;
char * password_check = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > RepeatPasswordEntry ) ) ;
char * password_check = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > RepeatPasswordEntry ) ) ;
if ( yon_char_is_empty ( password ) ) {
char * pasted_hash = ( char * ) gtk_entry_get_text ( GTK_ENTRY ( window - > PasswordHashEntry ) ) ;
if ( ! yon_char_is_empty ( pasted_hash ) ) {
@ -95,10 +95,39 @@ void on_password_accept(GtkWidget *self, dictionary *dict){
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , PASSWORD_MISMATCH_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
pwquality_settings_t * settings = pwquality_default_settings ( ) ;
int password_strength = pwquality_check ( settings , password , NULL , NULL , NULL ) ;
if ( password_strength < 30 ) {
yon_ubl_status_box_spawn ( GTK_CONTAINER ( window - > StatusBox ) , WEAK_PASSWORD_LABEL , 5 , BACKGROUND_IMAGE_FAIL_TYPE ) ;
return ;
}
}
on_subwindow_close ( self ) ;
}
void on_password_changed ( GtkWidget * , ubl_settings_usergroups_password_window * window ) {
pwquality_settings_t * settings = pwquality_default_settings ( ) ;
const char * new_password = gtk_entry_get_text ( GTK_ENTRY ( window - > PasswordEntry ) ) ;
int password_strength = pwquality_check ( settings , new_password , NULL , NULL , NULL ) ;
gtk_progress_bar_set_fraction ( GTK_PROGRESS_BAR ( window - > PasswordStrengthProgress ) , ( gdouble ) password_strength / 100 ) ;
if ( password_strength < 30 ) {
gtk_style_context_add_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " redBox " ) ;
gtk_style_context_remove_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " greenBox " ) ;
gtk_style_context_remove_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " yellowBox " ) ;
} else if ( password_strength < 60 ) {
gtk_style_context_add_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " yellowBox " ) ;
gtk_style_context_remove_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " redBox " ) ;
gtk_style_context_remove_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " greenBox " ) ;
} else {
gtk_style_context_add_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " greenBox " ) ;
gtk_style_context_remove_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " redBox " ) ;
gtk_style_context_remove_class ( gtk_widget_get_style_context ( window - > PasswordStrengthProgress ) , " yellowBox " ) ;
}
}
void on_password_hash_sensitiveness ( GtkWidget * , ubl_settings_usergroups_password_window * window ) {
if ( ! yon_char_is_empty ( gtk_entry_get_text ( GTK_ENTRY ( window - > PasswordEntry ) ) ) | | ! yon_char_is_empty ( gtk_entry_get_text ( GTK_ENTRY ( window - > RepeatPasswordEntry ) ) ) ) {
gtk_widget_set_sensitive ( window - > HashBox , 0 ) ;
@ -112,6 +141,43 @@ void on_password_hash_sensitiveness(GtkWidget *,ubl_settings_usergroups_password
}
}
gboolean on_password_focus_event ( GtkWidget * self , GdkEvent * , ubl_settings_usergroups_password_window * window ) {
gtk_popover_set_relative_to ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , self ) ;
gtk_popover_set_position ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , GTK_POS_RIGHT ) ;
g_signal_handlers_block_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_out_event ) , window ) ;
g_signal_handlers_block_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_event ) , window ) ;
gtk_popover_popup ( GTK_POPOVER ( window - > PasswordTooltipPopover ) ) ;
gtk_widget_grab_focus ( self ) ;
g_signal_handlers_unblock_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_out_event ) , window ) ;
g_signal_handlers_unblock_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_event ) , window ) ;
return GDK_EVENT_PROPAGATE ;
}
gboolean on_password_focus_out_event ( GtkWidget * self , GdkEvent * , ubl_settings_usergroups_password_window * window ) {
gtk_popover_set_relative_to ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , self ) ;
gtk_popover_set_position ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , GTK_POS_RIGHT ) ;
gtk_popover_popdown ( GTK_POPOVER ( window - > PasswordTooltipPopover ) ) ;
return GDK_EVENT_PROPAGATE ;
}
gboolean on_password_tooltip_event ( GtkWidget * self , GdkEvent * , ubl_settings_usergroups_password_window * window ) {
gtk_popover_set_relative_to ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , self ) ;
gtk_popover_set_position ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , GTK_POS_RIGHT ) ;
g_signal_handlers_block_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_out_event ) , window ) ;
g_signal_handlers_block_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_event ) , window ) ;
gtk_popover_popup ( GTK_POPOVER ( window - > PasswordTooltipPopover ) ) ;
g_signal_handlers_unblock_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_out_event ) , window ) ;
g_signal_handlers_unblock_by_func ( G_OBJECT ( self ) , G_CALLBACK ( on_password_focus_event ) , window ) ;
return GDK_EVENT_PROPAGATE ;
}
gboolean on_password_tooltip_out_event ( GtkWidget * self , GdkEvent * , ubl_settings_usergroups_password_window * window ) {
if ( gtk_widget_has_focus ( window - > PasswordEntry ) ) return GDK_EVENT_PROPAGATE ;
gtk_popover_set_relative_to ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , self ) ;
gtk_popover_set_position ( GTK_POPOVER ( window - > PasswordTooltipPopover ) , GTK_POS_RIGHT ) ;
gtk_popover_popdown ( GTK_POPOVER ( window - > PasswordTooltipPopover ) ) ;
return GDK_EVENT_PROPAGATE ;
}
ubl_settings_usergroups_password_window * yon_ubl_settings_usergroups_password_new ( ) {
ubl_settings_usergroups_password_window * window = malloc ( sizeof ( ubl_settings_usergroups_password_window ) ) ;
GtkBuilder * builder = gtk_builder_new_from_resource ( glade_path_ubl_settings_usergroups_password ) ;
@ -123,6 +189,9 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne
window - > HashBox = yon_gtk_builder_get_widget ( builder , " HashBox " ) ;
window - > PasswordBox = yon_gtk_builder_get_widget ( builder , " PasswordBox " ) ;
window - > NoEncriptionCheck = yon_gtk_builder_get_widget ( builder , " NoEncriptionCheck " ) ;
window - > PasswordStrengthProgress = yon_gtk_builder_get_widget ( builder , " PasswordStrengthProgress " ) ;
window - > PasswordTooltipPopover = yon_gtk_builder_get_widget ( builder , " PasswordTooltipPopover " ) ;
window - > PassowordTooltipLabel = yon_gtk_builder_get_widget ( builder , " PassowordTooltipLabel " ) ;
window - > UserCancelButton = yon_gtk_builder_get_widget ( builder , " UserCancelButton " ) ;
window - > UserOkButton = yon_gtk_builder_get_widget ( builder , " UserOkButton " ) ;
@ -130,13 +199,19 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne
yon_window_config_custom_window_setup ( GTK_WINDOW ( window - > CreateGroupWindow ) , " PasswordWindow " ) ;
g_signal_connect ( G_OBJECT ( window - > UserCancelButton ) , " clicked " , G_CALLBACK ( on_subwindow_close ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " icon-press " , G_CALLBACK ( on_password_show_hide ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " changed " , G_CALLBACK ( on_password_changed ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " changed " , G_CALLBACK ( on_password_hash_sensitiveness ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > RepeatPasswordEntry ) , " changed " , G_CALLBACK ( on_password_hash_sensitiveness ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordHashEntry ) , " changed " , G_CALLBACK ( on_password_hash_sensitiveness ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > RepeatPasswordEntry ) , " icon-press " , G_CALLBACK ( on_password_show_hide ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordHashEntry ) , " icon-press " , G_CALLBACK ( on_password_show_hide ) , NULL ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " focus-in-event " , G_CALLBACK ( on_password_focus_event ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " focus-out-event " , G_CALLBACK ( on_password_focus_out_event ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " enter-notify-event " , G_CALLBACK ( on_password_tooltip_event ) , window ) ;
g_signal_connect ( G_OBJECT ( window - > PasswordEntry ) , " leave-notify-event " , G_CALLBACK ( on_password_tooltip_out_event ) , window ) ;
gtk_window_set_title ( GTK_WINDOW ( window - > CreateGroupWindow ) , PASSWORD_TITLE_LABEL ) ;
return window ;
}