diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 48370b5..e8fc358 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -210,8 +210,8 @@ void on_additional_settings_clicked(GtkWidget *self, GtkEntry *output_target){ } -void on_expiration_clicked(GtkWidget *self, GtkEntry *output_target){ - // gtk_popover_popdown(); +void on_expiration_clicked(GtkWidget *self, ubl_settings_usergroups_user_window *window){ + gtk_popover_popup(GTK_POPOVER(window->CalendarPopup)); } // standard functions @@ -832,7 +832,7 @@ void on_user_save(GtkWidget *self, dictionary *dict){ password_expiration_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordExpirationEntry)); if (!yon_char_is_empty(password_expiration_date)){ - password_expiration_date = password_expiration_date; + password_expiration_date = yon_char_from_long(window->expiration_unix); } warning_days = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin))); @@ -917,6 +917,14 @@ void on_user_save(GtkWidget *self, dictionary *dict){ on_subwindow_close(self); } +void on_date_selected(GtkWidget *self, ubl_settings_usergroups_user_window *window){ + int year=0, month=0, day=0; + gtk_calendar_get_date(GTK_CALENDAR(window->ExpirationCalendar),&year,&month,&day); + GDateTime *date = g_date_time_new_local(year,month,day,23,59,59); + gtk_entry_set_text(GTK_ENTRY(window->userPasswordExpirationEntry), g_date_time_format(date,"%c")); + window->expiration_unix=g_date_time_to_unix(date); +} + ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_user); @@ -955,6 +963,8 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ window->userExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry"); window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); + window->CalendarPopup=yon_gtk_builder_get_widget(builder,"CalendarPopover"); + window->ExpirationCalendar=yon_gtk_builder_get_widget(builder,"ExpirationCalendar"); gtk_window_set_title(GTK_WINDOW(window->CreateUserWindow),USER_TITLE_LABEL); int shell_size=0; @@ -981,13 +991,14 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ g_signal_connect(G_OBJECT(window->UserGroupsButton),"clicked",G_CALLBACK(on_groups_clicked),window->userGroupsEntry); g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict); g_signal_connect(G_OBJECT(window->userAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userAdditionalGroupsEntry); - g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window->userPasswordExpirationEntry); + g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window); 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->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeEntry); g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeButton); g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userPasswordButton); g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userGroupsEntry); g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_user_shell_changed),window); + g_signal_connect(G_OBJECT(window->ExpirationCalendar),"day-selected",G_CALLBACK(on_date_selected),window); return window; } @@ -1096,7 +1107,10 @@ void on_main_edit(GtkWidget *self, main_window *widgets){ gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin),atol(parsed_size>2?parameters[2]:"0")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userWarningSpin),atol(parsed_size>3?parameters[3]:"0")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userActivitySpin),atol(parsed_size>4?parameters[4]:"0")); - gtk_entry_set_text(GTK_ENTRY(window->userPasswordExpirationEntry),parsed_size>5?parameters[5]:""); + if (parsed_size>5){ + GDateTime *date = g_date_time_new_from_unix_local(atol(parameters[5])); + gtk_entry_set_text(GTK_ENTRY(window->userPasswordExpirationEntry),g_date_time_format(date,"%c")); + } gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->CreateUserWindow); } diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 936fcd1..dc5bdf8 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -248,6 +248,10 @@ typedef struct{ GtkWidget *userExtraOptionsEntry; GtkWidget *UserCancelButton; GtkWidget *UserOkButton; + GtkWidget *CalendarPopup; + GtkWidget *ExpirationCalendar; + + long expiration_unix; char *old_password; } ubl_settings_usergroups_user_window;