Fixed RMB menus

pull/129/head
Ivan Yartsev 6 months ago
parent 4b36dced1c
commit 3afecf7870

@ -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;i<usize;i++){
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->CreateLogUserCombo),users[i],users[i]);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->RotationAtUserCombo),users[i],users[i]);
}
for (int i=0;i<main_config.groups_size;i++){
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->RotationAtGroupCombo),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],&parameter_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);

@ -149,6 +149,8 @@ typedef struct {
GtkWidget *UpgradePermissionsMenuItem;
GtkWidget *PermissionsLock;
// Custom
rmb_menu_window *LogsRMBMenu;
rmb_menu_window *ServicesRMBMenu;
} main_window;

@ -229,9 +229,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<property name="tooltip-column">2</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="resizable">True</property>
@ -361,6 +358,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkButton" id="ServicesEditButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Configure service</property>
@ -392,9 +390,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">ServicesList</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="sizing">fixed</property>

Loading…
Cancel
Save