diff --git a/source/ubl-settings-services.c b/source/ubl-settings-services.c index 7377295..1905d77 100644 --- a/source/ubl-settings-services.c +++ b/source/ubl-settings-services.c @@ -440,14 +440,15 @@ void on_system_launch_clicked(GtkWidget *self, char *path, main_window *widgets) config_str result = yon_config_load(service_check_active_command(service_name),&size); yon_char_remove_last_symbol(result[0],'\n'); if (size>0){ + int answer = 0; if (!strcmp(result[0],"active")){ if (status){ dialog_confirmation_data data; data.action_text=STOP_SERVICE_WARMING_LABEL(service_name); data.function=(void*)(void*)on_system_kill_confirmed; data.data=service_name; - int answer = yon_confirmation_dialog_call(self,&data); - if (answer) + answer = yon_confirmation_dialog_call(widgets->Window,&data); + if (answer==GTK_RESPONSE_ACCEPT) gtk_list_store_set(GTK_LIST_STORE(model),&iter,4,0,-1); } } else { @@ -1239,17 +1240,22 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1); gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),name); gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),descr); - gtk_widget_set_sensitive(widgets->SystemEditButton,1); - gtk_widget_set_sensitive(widgets->SystemLogButton,1); gtk_widget_set_sensitive(widgets->SystemStatusButton,1); gtk_widget_set_sensitive(widgets->SystemInfoButton,1); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->SystemEditButton,1); + gtk_widget_set_sensitive(widgets->SystemLogButton,1); + + } } else { gtk_label_set_text(GTK_LABEL(widgets->SystemServiceLabel),""); gtk_label_set_text(GTK_LABEL(widgets->SystemDescriptionLabel),""); - gtk_widget_set_sensitive(widgets->SystemEditButton,0); - gtk_widget_set_sensitive(widgets->SystemLogButton,0); gtk_widget_set_sensitive(widgets->SystemStatusButton,0); gtk_widget_set_sensitive(widgets->SystemInfoButton,0); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->SystemEditButton,0); + gtk_widget_set_sensitive(widgets->SystemLogButton,0); + } } } else if (page==1){ model = GTK_TREE_MODEL(widgets->UserList); @@ -1259,17 +1265,22 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ gtk_tree_model_get(model,&iter,5,&name,6,&descr,-1); gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),name); gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),descr); - gtk_widget_set_sensitive(widgets->UserEditButton,1); - gtk_widget_set_sensitive(widgets->UserLogButton,1); gtk_widget_set_sensitive(widgets->UserStatusButton,1); gtk_widget_set_sensitive(widgets->UserInfoButton,1); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->UserEditButton,1); + gtk_widget_set_sensitive(widgets->UserLogButton,1); + } } else { gtk_label_set_text(GTK_LABEL(widgets->UserServiceLabel),""); gtk_label_set_text(GTK_LABEL(widgets->UserDescriptionLabel),""); - gtk_widget_set_sensitive(widgets->UserEditButton,0); - gtk_widget_set_sensitive(widgets->UserLogButton,0); gtk_widget_set_sensitive(widgets->UserStatusButton,0); gtk_widget_set_sensitive(widgets->UserInfoButton,0); + if (getuid()==0){ + gtk_widget_set_sensitive(widgets->UserEditButton,0); + gtk_widget_set_sensitive(widgets->UserLogButton,0); + + } } } @@ -1278,6 +1289,29 @@ void on_tree_selection_changed(GtkWidget *self, main_window *widgets){ } } +void on_root_get_root(char *argline){ + yon_launch(argline); +} + +void on_root_access(GtkWidget *self, main_window *widgets){ + if (self){}; + if (getuid()){ + char *argline = LocaleName; + for (int i=1;iWindow); + } + } +} + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -1431,14 +1465,22 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->ConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->ConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigAutostartCell),"toggled",G_CALLBACK(on_config_autostart_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigAutostopCell),"toggled",G_CALLBACK(on_config_autostop_clicked),widgets); g_signal_connect(G_OBJECT(widgets->UserConfigBlockCell),"toggled",G_CALLBACK(on_config_block_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + if (getuid()==0){ + g_signal_connect(G_OBJECT(widgets->SystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->SystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + + g_signal_connect(G_OBJECT(widgets->UserSystemAutostartCell),"toggled",G_CALLBACK(on_system_autostart_clicked),widgets); + g_signal_connect(G_OBJECT(widgets->UserSystemLaunchedCell),"toggled",G_CALLBACK(on_system_launch_clicked),widgets); + } else { + gtk_widget_set_sensitive(widgets->SystemUpdateButton,0); + gtk_widget_set_sensitive(widgets->UserUpdateButton,0); + gtk_widget_set_sensitive(widgets->SystemPrevButton,0); + gtk_widget_set_sensitive(widgets->UserPrevButton,0); + } yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UserUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->SystemUnitsTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->ConfigMainTree)); @@ -1492,6 +1534,23 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->SystemUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserUnitsTree),"cursor-changed",G_CALLBACK(on_tree_selection_changed),widgets); + GtkWidget *root_item = gtk_menu_item_new(); + gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop"); + gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); + gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *root_label = gtk_label_new(ROOT_CHECK_LABEL); + GtkWidget *root_check = gtk_check_button_new(); + gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_item); + gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0); + gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0); + gtk_container_add(GTK_CONTAINER(root_item),box); + gtk_widget_show_all(root_item); + g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),widgets); + if (getuid()==0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1); + gtk_widget_set_sensitive(root_item,0); + } gtk_tree_model_filter_set_visible_func(widgets->UserFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_model_filter_set_visible_func(widgets->SystemFilter,(GtkTreeModelFilterVisibleFunc)yon_filter,widgets,NULL); gtk_tree_view_set_search_column(GTK_TREE_VIEW(widgets->UserUnitsTree),5); @@ -1519,8 +1578,11 @@ int main(int argc, char *argv[]){ yon_main_window_complete((main_window*)widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); - if (getuid()!=0) + if (getuid()!=0){ yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } + main_config.launch_arguments=argv; + main_config.launch_size=argc; gtk_main(); return 0; } \ No newline at end of file diff --git a/source/ubl-settings-services.h b/source/ubl-settings-services.h index 443dfb8..e017e9a 100644 --- a/source/ubl-settings-services.h +++ b/source/ubl-settings-services.h @@ -128,6 +128,8 @@ typedef struct { GtkTreeModel *SourceFilter; int update_thread_active; + config_str launch_arguments; + int launch_size; } config; @@ -396,4 +398,7 @@ gboolean on_blocked_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); gboolean on_source_user_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); -gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); \ No newline at end of file +gboolean on_source_system_filter(GtkTreeModel *model, GtkTreeIter *iter,void *data); + +void on_root_get_root(char *argline); +void on_root_access(GtkWidget *self, main_window *widgets); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index b8d8ee6..c2493a1 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -122,4 +122,6 @@ #define STATE_LISTENING_LABEL _("listening") #define STATE_EXITED_LABEL _("exited") #define STATE_MOUNTED_LABEL _("mounted") -#define STATE_PLUGGED_LABEL _("plugged") \ No newline at end of file +#define STATE_PLUGGED_LABEL _("plugged") + +#define ROOT_CHECK_LABEL _("Upgrade to root") \ No newline at end of file diff --git a/ubl-settings-services.pot b/ubl-settings-services.pot index 2edf990..8ab1b5c 100644 --- a/ubl-settings-services.pot +++ b/ubl-settings-services.pot @@ -414,3 +414,7 @@ msgstr "" #: source/ubl-strings.h:125 msgid "plugged" msgstr "" + +#: source/ubl-strings.h:127 +msgid "Upgrade to root" +msgstr "" diff --git a/ubl-settings-services_ru.po b/ubl-settings-services_ru.po index 9167fac..43b2602 100644 --- a/ubl-settings-services_ru.po +++ b/ubl-settings-services_ru.po @@ -417,3 +417,7 @@ msgstr "примонтирован" #: source/ubl-strings.h:125 msgid "plugged" msgstr "подключен" + +#: source/ubl-strings.h:127 +msgid "Upgrade to root" +msgstr "Повысить права до root"