Limitation tooltips added

pull/309/head
parent d6108fa41d
commit 4acb7d797f

@ -1063,3 +1063,11 @@ msgstr ""
#: source/ubl-strings.h:302 #: source/ubl-strings.h:302
msgid "The password does not meet the password policy requirements" msgid "The password does not meet the password policy requirements"
msgstr "" msgstr ""
#: source/ubl-strings.h:302
msgid "- Latin characters only\n- Maximum 256 characters"
msgstr ""
#: source/ubl-strings.h:302
msgid "- Latin characters only\n- Start with a-zA-Z_ only\n- Use only characters a-zA-Z0-9_-\n- Maximum 32 characters\n- Regexp check [a-zA-Z_][a-zA-Z0-9_-]*"
msgstr ""

@ -1153,7 +1153,14 @@ msgstr "Правила составления логина не соблюден
#~ msgid "main group will be set to default group" #~ msgid "main group will be set to default group"
#~ msgstr "получит(-ат) основную группу по умолчанию" #~ msgstr "получит(-ат) основную группу по умолчанию"
#: source/ubl-strings.h:302 #: source/ubl-strings.h:302
msgid "The password does not meet the password policy requirements" msgid "The password does not meet the password policy requirements"
msgstr "Пароль не соответствует требованиям политики паролей" msgstr "Пароль не соответствует требованиям политики паролей"
#: source/ubl-strings.h:302
msgid "- Latin characters only\n- Maximum 256 characters"
msgstr "- Только латинские символы.\n- Максимум 256 символов."
#: source/ubl-strings.h:302
msgid "- Latin characters only\n- Start with a-zA-Z_ only\n- Use only characters a-zA-Z0-9_-\n- Maximum 32 characters\n- Regexp check [a-zA-Z_][a-zA-Z0-9_-]*"
msgstr "- Только латинские символы\n- Начало только c a-zA-Z_\n- Использовать только символы a-zA-Z0-9_-\n- Максимум 32 символа\n- Проверка regexp [a-zA-Z_][a-zA-Z0-9_-]*"

@ -141,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 *yon_ubl_settings_usergroups_password_new(){
ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window)); 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); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password);
@ -153,6 +190,8 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne
window->PasswordBox=yon_gtk_builder_get_widget(builder,"PasswordBox"); window->PasswordBox=yon_gtk_builder_get_widget(builder,"PasswordBox");
window->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck"); window->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck");
window->PasswordStrengthProgress=yon_gtk_builder_get_widget(builder,"PasswordStrengthProgress"); 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->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
@ -166,8 +205,13 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne
g_signal_connect(G_OBJECT(window->PasswordHashEntry),"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->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->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); gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),PASSWORD_TITLE_LABEL);
return window; return window;
} }

@ -1,5 +1,42 @@
#include "ubl-settings-usergroups.h" #include "ubl-settings-usergroups.h"
gboolean on_login_focus_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window){
gtk_popover_set_relative_to(GTK_POPOVER(window->LoginTooltipPopover),self);
gtk_popover_set_position(GTK_POPOVER(window->LoginTooltipPopover),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->LoginTooltipPopover));
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_login_focus_out_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window){
gtk_popover_set_relative_to(GTK_POPOVER(window->LoginTooltipPopover),self);
gtk_popover_set_position(GTK_POPOVER(window->LoginTooltipPopover),GTK_POS_RIGHT);
gtk_popover_popdown(GTK_POPOVER(window->LoginTooltipPopover));
return GDK_EVENT_PROPAGATE;
}
gboolean on_login_tooltip_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window){
gtk_popover_set_relative_to(GTK_POPOVER(window->LoginTooltipPopover),self);
gtk_popover_set_position(GTK_POPOVER(window->LoginTooltipPopover),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->LoginTooltipPopover));
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_login_tooltip_out_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window){
if (gtk_widget_has_focus(window->userLoginEntry)) return GDK_EVENT_PROPAGATE;
gtk_popover_set_relative_to(GTK_POPOVER(window->LoginTooltipPopover),self);
gtk_popover_set_position(GTK_POPOVER(window->LoginTooltipPopover),GTK_POS_RIGHT);
gtk_popover_popdown(GTK_POPOVER(window->LoginTooltipPopover));
return GDK_EVENT_PROPAGATE;
}
char *yon_user_get_system_groups(char *target_login){ char *yon_user_get_system_groups(char *target_login){
char *groups_string = NULL; char *groups_string = NULL;
groups_string=""; groups_string="";
@ -269,6 +306,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
window->UsershadowShutdownCheck=yon_gtk_builder_get_widget(builder,"UsershadowShutdownCheck"); window->UsershadowShutdownCheck=yon_gtk_builder_get_widget(builder,"UsershadowShutdownCheck");
window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel");
window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook");
window->LoginTooltipPopover=yon_gtk_builder_get_widget(builder,"LoginTooltipPopover");
window->expiration_unix=NULL; window->expiration_unix=NULL;
window->last_uid=NULL; window->last_uid=NULL;
yon_gtk_entry_block_symbols(GTK_ENTRY(window->userUserNameEntry),"'\":\n"); yon_gtk_entry_block_symbols(GTK_ENTRY(window->userUserNameEntry),"'\":\n");
@ -305,6 +343,10 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->userPasswordCombo); yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->userPasswordCombo);
yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->userPasswordEntry); yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->userPasswordEntry);
// char *password = yon_config_get_by_key(USERADD((char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)))); // char *password = yon_config_get_by_key(USERADD((char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry))));
g_signal_connect(G_OBJECT(window->userLoginEntry),"focus-in-event",G_CALLBACK(on_login_focus_event),window);
g_signal_connect(G_OBJECT(window->userLoginEntry),"focus-out-event",G_CALLBACK(on_login_focus_out_event),window);
g_signal_connect(G_OBJECT(window->userLoginEntry),"enter-notify-event",G_CALLBACK(on_login_tooltip_event),window);
g_signal_connect(G_OBJECT(window->userLoginEntry),"leave-notify-event",G_CALLBACK(on_login_tooltip_out_event),window);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
g_signal_connect(G_OBJECT(window->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry); g_signal_connect(G_OBJECT(window->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry);

@ -372,6 +372,8 @@ typedef struct{
GtkWidget *PasswordBox; GtkWidget *PasswordBox;
GtkWidget *NoEncriptionCheck; GtkWidget *NoEncriptionCheck;
GtkWidget *PasswordStrengthProgress; GtkWidget *PasswordStrengthProgress;
GtkWidget *PasswordTooltipPopover;
GtkWidget *PassowordTooltipLabel;
} ubl_settings_usergroups_password_window; } ubl_settings_usergroups_password_window;
typedef struct { typedef struct {
@ -440,6 +442,7 @@ typedef struct{
GtkWidget *userTitleNameLabel; GtkWidget *userTitleNameLabel;
GtkWidget *userSyncSAMBAPasswordCheck; GtkWidget *userSyncSAMBAPasswordCheck;
GtkWidget *MainNotebook; GtkWidget *MainNotebook;
GtkWidget *LoginTooltipPopover;
char *expiration_unix; char *expiration_unix;
@ -641,4 +644,12 @@ void on_home_changed(GtkWidget *self,ubl_settings_usergroups_user_window *window
gboolean yon_user_set_locales(GtkWidget *target); gboolean yon_user_set_locales(GtkWidget *target);
void *yon_load_languages(void *target); void *yon_load_languages(void *target);
void on_password_changed(GtkWidget *, ubl_settings_usergroups_password_window *window); void on_password_changed(GtkWidget *, ubl_settings_usergroups_password_window *window);
gboolean on_password_focus_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_password_window *window);
gboolean on_password_focus_out_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_password_window *window);
gboolean on_password_tooltip_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_password_window *window);
gboolean on_password_tooltip_out_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_password_window *window);
gboolean on_login_focus_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window);
gboolean on_login_focus_out_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window);
gboolean on_login_tooltip_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window);
gboolean on_login_tooltip_out_event(GtkWidget *self, GdkEvent *, ubl_settings_usergroups_user_window *window);
#endif #endif

@ -299,3 +299,5 @@
#define SYSTEM_LABEL _("System") #define SYSTEM_LABEL _("System")
#define INVALID_LOGIN_LABEL _("The login rules are not followed") #define INVALID_LOGIN_LABEL _("The login rules are not followed")
#define WEAK_PASSWORD_LABEL _("The password does not meet the password policy requirements") #define WEAK_PASSWORD_LABEL _("The password does not meet the password policy requirements")
#define PASSWORD_LIMITATIONS_TOOLTIP_LABEL _("- Latin characters only\n- Maximum 256 characters")
#define LOGIN_LIMITATIONS_TOOLTIP_LABEL _("- Latin characters only\n- Start with a-zA-Z_ only\n- Use only characters a-zA-Z0-9_-\n- Maximum 32 characters\n- Regexp check [a-zA-Z_][a-zA-Z0-9_-]*")

@ -3,6 +3,26 @@
<interface domain="ubl-settings-usergroups"> <interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css --> <!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkPopover" id="PasswordTooltipPopover">
<property name="can-focus">False</property>
<property name="position">right</property>
<property name="modal">False</property>
<property name="constrain-to">none</property>
<child>
<object class="GtkLabel" id="PassowordTooltipLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="label" translatable="yes">- Latin characters only
- Maximum 256 characters</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
<object class="GtkImage" id="image4"> <object class="GtkImage" id="image4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -77,6 +97,7 @@
<object class="GtkEntry" id="PasswordEntry"> <object class="GtkEntry" id="PasswordEntry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="max-length">256</property>
<property name="visibility">False</property> <property name="visibility">False</property>
<property name="invisible-char">*</property> <property name="invisible-char">*</property>
<property name="truncate-multiline">True</property> <property name="truncate-multiline">True</property>

@ -3,6 +3,31 @@
<interface domain="ubl-settings-usergroups"> <interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css --> <!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkPopover" id="LoginTooltipPopover">
<property name="can-focus">False</property>
<property name="position">right</property>
<property name="modal">False</property>
<property name="constrain-to">none</property>
<child>
<object class="GtkLabel" id="PassowordTooltipLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="label" translatable="yes">- Latin characters only
- Start with a-zA-Z_ only
- Use only characters a-zA-Z0-9_-
- Maximum 32 characters
- Regexp check [a-zA-Z_][a-zA-Z0-9_-]*</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
</child>
</object>
<object class="GtkSizeGroup"/> <object class="GtkSizeGroup"/>
<object class="GtkAdjustment" id="adjustment1"> <object class="GtkAdjustment" id="adjustment1">
<property name="upper">1e+21</property> <property name="upper">1e+21</property>

Loading…
Cancel
Save