diff --git a/source/ubl-settings-logging.c b/source/ubl-settings-logging.c index 866d335..8153ccc 100644 --- a/source/ubl-settings-logging.c +++ b/source/ubl-settings-logging.c @@ -1289,8 +1289,40 @@ void on_logrotate_save(GtkWidget *, dictionary *dict){ if (!yon_char_is_empty(firstaction)||!yon_char_is_empty(after_once)||!yon_char_is_empty(before)||!yon_char_is_empty(after)) endscript = "endscript"; } - - char *commandline = yon_char_unite(period,yon_add_space_if_exists(size),yon_add_space_if_exists(rotate_count),yon_add_space_if_exists(olddir),yon_add_space_if_exists(su),yon_add_space_if_exists(missingok),yon_add_space_if_exists(ifempty),yon_add_space_if_exists(notifempty),yon_add_space_if_exists(minage),yon_add_space_if_exists(maxage),yon_add_space_if_exists(minsize),yon_add_space_if_exists(maxsize),yon_add_space_if_exists(create),yon_add_space_if_exists(copytruncate),yon_add_space_if_exists(compress),yon_add_space_if_exists(delaycompress),yon_add_space_if_exists(extension),yon_add_space_if_exists(dateext),yon_add_space_if_exists(start),yon_add_space_if_exists(mail),yon_add_space_if_exists(mailfirst),yon_add_space_if_exists(sharedscripts),yon_add_space_if_exists(firstaction),yon_add_space_if_exists(lastaction),yon_add_space_if_exists(prerotate),yon_add_space_if_exists(postrotate),yon_add_space_if_exists(preremove),yon_add_space_if_exists(endscript),NULL); + int create_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->CreateLogCombo)); + if (create_active){ + create = yon_char_unite("create ", gtk_entry_get_text(GTK_ENTRY(window->CreateLogEntry))," ",gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->CreateLogUserCombo))," ",gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->CreateGroupCombo)),NULL); + } + + char *commandline = yon_char_unite(period, + yon_add_space_if_exists(size), + yon_add_space_if_exists(rotate_count), + yon_add_space_if_exists(olddir), + yon_add_space_if_exists(su), + yon_add_space_if_exists(missingok), + yon_add_space_if_exists(ifempty), + yon_add_space_if_exists(notifempty), + yon_add_space_if_exists(minage), + yon_add_space_if_exists(maxage), + yon_add_space_if_exists(minsize), + yon_add_space_if_exists(maxsize), + yon_add_space_if_exists(create), + yon_add_space_if_exists(copytruncate), + yon_add_space_if_exists(compress), + yon_add_space_if_exists(delaycompress), + yon_add_space_if_exists(extension), + yon_add_space_if_exists(dateext), + yon_add_space_if_exists(start), + yon_add_space_if_exists(mail), + yon_add_space_if_exists(mailfirst), + yon_add_space_if_exists(sharedscripts), + yon_add_space_if_exists(firstaction), + yon_add_space_if_exists(lastaction), + yon_add_space_if_exists(prerotate), + yon_add_space_if_exists(postrotate), + yon_add_space_if_exists(preremove), + yon_add_space_if_exists(endscript), + NULL); if (commandline[0]==','){ free(yon_char_divide_search(commandline,",",-1)); } @@ -1459,12 +1491,14 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind int usize=0; config_str users = yon_ubl_get_all_users(&usize); - yon_gtk_combo_box_fill(window->CreateLogUserCombo,users,usize); - yon_gtk_combo_box_fill(window->RotationAtUserCombo,users,usize); + for (int i=0;iCreateLogUserCombo),users[i],users[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->RotationAtUserCombo),users[i],users[i]); + } for (int i=0;iRotationAtGroupCombo),main_config.groups[i]); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->CreateGroupCombo),main_config.groups[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->RotationAtGroupCombo),main_config.groups[i],main_config.groups[i]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->CreateGroupCombo),main_config.groups[i],main_config.groups[i]); } if (paths){ @@ -1524,6 +1558,21 @@ logrotate_configure_window *yon_logrotate_window_new(char *paths, logrotate_wind gtk_combo_box_set_active(GTK_COMBO_BOX(window->JournalEmptyCombo),1); }else if (!strcmp(parsed[i],"notifempty")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->JournalEmptyCombo),2); + } else if (!strcmp(parsed[i],"nocreate")) { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->CreateLogCombo),1); + } else if (!strcmp(parsed[i],"copytruncate")) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->CutCheck),1); + } else if (!strcmp(parsed[i],"nocopytruncate")) { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->CreateLogCombo),3); + } else if (strstr(parsed[i],"create")){ + int parameter_size; + config_str parameter = yon_char_parse(parsed[i],¶meter_size," "); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->CreateLogCombo),2); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->CreateLogUserCombo),parameter[2]); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->CreateGroupCombo),parameter[3]); + gtk_entry_set_text(GTK_ENTRY(window->CreateLogEntry),parameter[1]); + yon_char_parsed_free(parameter,parameter_size); + }else if (strstr(parsed[i],"minage")){ char *value = strstr(parsed[i]," "); if (value) value++; @@ -2568,19 +2617,28 @@ void on_service_edit(GtkWidget *self,main_window *widgets){ void on_main_window_tree_selection_changed(GtkWidget *,main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->list); GtkTreeIter iter; + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->LogsRMBMenu->menu)); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){ gboolean is_standard; gtk_tree_model_get(model,&iter,3,&is_standard,-1); gtk_widget_set_sensitive(widgets->AddButton,1); - if (!is_standard||is_standard==2) + if (!is_standard||is_standard==2){ gtk_widget_set_sensitive(widgets->RemoveButton,1); - else + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,2)),1); + } + else{ gtk_widget_set_sensitive(widgets->RemoveButton,0); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,2)),0); + } gtk_widget_set_sensitive(widgets->InspectButton,1); gtk_widget_set_sensitive(widgets->ConfigureButton,1); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,1)),1); } else { gtk_widget_set_sensitive(widgets->AddButton,1); gtk_widget_set_sensitive(widgets->RemoveButton,0); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,1)),0); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,2)),0); gtk_widget_set_sensitive(widgets->InspectButton,0); gtk_widget_set_sensitive(widgets->ConfigureButton,0); } @@ -2594,34 +2652,65 @@ void on_main_window_services_tree_selection_changed(GtkWidget *,main_window *wid gboolean is_active; gboolean is_enabled; char *name; + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->ServicesRMBMenu->menu)); gtk_tree_model_get(model,&iter,0,&is_active,1,&is_enabled,2,&name,-1); if (is_active){ gtk_widget_set_sensitive(widgets->ServicesEditButton,1); gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,1); gtk_widget_set_sensitive(widgets->ServicesStartStopButton,1); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,0)),1); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,1)),1); gtk_widget_set_tooltip_text(widgets->ServicesEnableDisableButton,AUTOSTART_OFF_LABEL); gtk_widget_set_tooltip_text(widgets->ServicesStartStopButton,STOP_SERVICE_LABEL); gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesStartStopButton))),stop_icon_name,GTK_ICON_SIZE_BUTTON); + GList *item = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); + GList *items = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(item,0))); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(items,0)),stop_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(g_list_nth_data(items,1)),STOP_SERVICE_LABEL); + g_list_free(item); + g_list_free(items); } else { gtk_widget_set_sensitive(widgets->ServicesEditButton,0); gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,1); gtk_widget_set_sensitive(widgets->ServicesStartStopButton,1); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,0)),1); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,1)),1); gtk_widget_set_tooltip_text(widgets->ServicesEnableDisableButton,AUTOSTART_ON_LABEL); gtk_widget_set_tooltip_text(widgets->ServicesStartStopButton,START_SERVICE_LABEL); gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesStartStopButton))),start_icon_name,GTK_ICON_SIZE_BUTTON); + GList *item = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); + GList *items = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(item,0))); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(items,0)),start_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(g_list_nth_data(items,1)),START_SERVICE_LABEL); + g_list_free(item); + g_list_free(items); } if (is_enabled){ gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesEnableDisableButton))),disable_icon_name,GTK_ICON_SIZE_BUTTON); + GList *item = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,1))); + GList *items = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(item,0))); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(items,0)),disable_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(g_list_nth_data(items,1)),AUTOSTART_OFF_LABEL); + g_list_free(item); + g_list_free(items); } else { gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesEnableDisableButton))),enable_icon_name,GTK_ICON_SIZE_BUTTON); - + GList *item = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,1))); + GList *items = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(item,0))); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(items,0)),enable_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(g_list_nth_data(items,1)),AUTOSTART_ON_LABEL); + g_list_free(item); + g_list_free(items); } if (!strcmp(name,"journald")){ + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,0)),0); + gtk_widget_set_sensitive(GTK_WIDGET(g_list_nth_data(list,1)),0); gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,0); gtk_widget_set_sensitive(widgets->ServicesStartStopButton,0); gtk_widget_set_tooltip_text(widgets->ServicesEnableDisableButton,AUTOSTART_OFF_LABEL); gtk_widget_set_tooltip_text(widgets->ServicesStartStopButton,STOP_SERVICE_LABEL); } + g_list_free(list); } else { gtk_widget_set_sensitive(widgets->ServicesEditButton,0); gtk_widget_set_sensitive(widgets->ServicesEnableDisableButton,0); @@ -2631,9 +2720,11 @@ void on_main_window_services_tree_selection_changed(GtkWidget *,main_window *wid } } -void on_start_stop_clicked(GtkButton *self, main_window *widgets){ +void on_start_stop_clicked(GtkButton *, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->ServicesList); GtkTreeIter iter; + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->ServicesRMBMenu->buttons->first->data)); + GList *box = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ServicesTree)),&model,&iter)){ char *start_command; char *stop_command; @@ -2642,12 +2733,14 @@ void on_start_stop_clicked(GtkButton *self, main_window *widgets){ if (is_started){ g_spawn_command_line_sync(yon_debug_output("%s\n",stop_command),NULL,NULL,NULL,NULL); gtk_list_store_set(widgets->ServicesList,&iter,0,0,-1); - gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),start_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesStartStopButton))),start_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(box,0)),start_icon_name,GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text(widgets->ServicesStartStopButton,START_SERVICE_LABEL); } else { g_spawn_command_line_sync(yon_debug_output("%s\n",start_command),NULL,NULL,NULL,NULL); gtk_list_store_set(widgets->ServicesList,&iter,0,1,-1); - gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),stop_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesStartStopButton))),stop_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(box,0)),stop_icon_name,GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text(widgets->ServicesStartStopButton,STOP_SERVICE_LABEL); } } @@ -2661,9 +2754,11 @@ queue_func *yon_queue_add_function(GSourceFunc func,void *data){ return queue; } -void on_enable_disable_clicked(GtkButton *self, main_window *widgets){ +void on_enable_disable_clicked(GtkButton *, main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->ServicesList); GtkTreeIter iter; + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->ServicesRMBMenu->buttons->first->next->data)); + GList *box = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->ServicesTree)),&model,&iter)){ char *start_command; char *stop_command; @@ -2672,7 +2767,8 @@ void on_enable_disable_clicked(GtkButton *self, main_window *widgets){ if (is_started){ yon_launch(stop_command); gtk_list_store_set(widgets->ServicesList,&iter,1,0,-1); - gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),enable_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesEnableDisableButton))),enable_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(box,0)),enable_icon_name,GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text(widgets->ServicesEnableDisableButton,AUTOSTART_ON_LABEL); } else { /* @@ -2683,7 +2779,8 @@ void on_enable_disable_clicked(GtkButton *self, main_window *widgets){ g_mutex_unlock(&main_config.authorized_mutex);*/ yon_launch(start_command); gtk_list_store_set(widgets->ServicesList,&iter,1,1,-1); - gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(self)),disable_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(gtk_button_get_image(GTK_BUTTON(widgets->ServicesEnableDisableButton))),disable_icon_name,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(g_list_nth_data(box,0)),disable_icon_name,GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text(widgets->ServicesEnableDisableButton,AUTOSTART_OFF_LABEL); } } @@ -2965,12 +3062,14 @@ void yon_main_window_complete(template_main_window **window){ g_signal_connect(G_OBJECT(widgets->ServicesStartStopButton),"clicked",G_CALLBACK(on_start_stop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ServicesEnableDisableButton),"clicked",G_CALLBACK(on_enable_disable_clicked),widgets); - yon_rmb_menu_setup(widgets->MainTree,(RmbCheck)gtk_widget_get_sensitive,widgets->MainTree, + widgets->LogsRMBMenu = yon_rmb_menu_setup(widgets->MainTree,(RmbCheck)gtk_widget_get_sensitive,widgets->MainTree, CONFIGURE_LOG_LABEL,edit_icon_name,G_CALLBACK(on_log_edit),widgets, ADD_LOG_LABEL,add_icon_name,G_CALLBACK(on_log_add),widgets, - // REMOVE_LOG_LABEL,remove_icon_name,G_CALLBACK(on_log_remove),widgets, + REMOVE_LOG_LABEL,remove_icon_name,G_CALLBACK(on_log_remove),widgets, NULL); - yon_rmb_menu_setup(widgets->ServicesTree,(RmbCheck)gtk_widget_get_sensitive,widgets->ServicesTree, + widgets->ServicesRMBMenu = yon_rmb_menu_setup(widgets->ServicesTree,(RmbCheck)gtk_widget_get_sensitive,widgets->ServicesTree, + START_SERVICE_LABEL,start_icon_name,G_CALLBACK(on_start_stop_clicked),widgets, + AUTOSTART_ON_LABEL,enable_icon_name,G_CALLBACK(on_enable_disable_clicked),widgets, CONFIGURE_SERVICE_LABEL,settings_icon_name,G_CALLBACK(on_service_edit),widgets, NULL); // yon_rmb_menu_setup(widgets->ServicesTree,(RmbCheck)gtk_widget_get_sensitive,widgets->MainTree,CONFIGURE_LOG_LABEL,edit_icon_name,G_CALLBACK(on_log_edit),widgets,ADD_LOG_LABEL,add_icon_name,G_CALLBACK(on_log_add),widgets,REMOVE_LOG_LABEL,remove_icon_name,G_CALLBACK(on_log_remove),widgets,NULL); diff --git a/source/ubl-settings-logging.h b/source/ubl-settings-logging.h index ef1cc39..f826847 100644 --- a/source/ubl-settings-logging.h +++ b/source/ubl-settings-logging.h @@ -149,6 +149,8 @@ typedef struct { GtkWidget *UpgradePermissionsMenuItem; GtkWidget *PermissionsLock; // Custom + rmb_menu_window *LogsRMBMenu; + rmb_menu_window *ServicesRMBMenu; } main_window; diff --git a/ubl-settings-logging.glade b/ubl-settings-logging.glade index 61c621d..4a6353a 100644 --- a/ubl-settings-logging.glade +++ b/ubl-settings-logging.glade @@ -229,9 +229,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True liststore1 2 - - - True @@ -361,6 +358,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True + False True True Configure service @@ -392,9 +390,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True ServicesList - - - fixed