User mode implementations

pull/28/head
parent b14d076a95
commit 7554172378

@ -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;i<main_config.launch_size;i++){
char *temp = yon_char_unite(argline," -a ",main_config.launch_arguments[i],NULL);
if(strcmp(argline,""))
free(argline);
argline=temp;
}
if (getuid()!=0){
argline = yon_char_unite("setsid /usr/bin/bash -c 'pkexec ",argline,"'; exit",NULL);
pthread_t thread_id;
pthread_create(&thread_id, NULL, (void *)on_root_get_root,argline);
gtk_widget_destroy(widgets->Window);
}
}
}
/**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);
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;
}

@ -128,6 +128,8 @@ typedef struct {
GtkTreeModel *SourceFilter;
int update_thread_active;
config_str launch_arguments;
int launch_size;
} config;
@ -397,3 +399,6 @@ 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);
void on_root_get_root(char *argline);
void on_root_access(GtkWidget *self, main_window *widgets);

@ -123,3 +123,5 @@
#define STATE_EXITED_LABEL _("exited")
#define STATE_MOUNTED_LABEL _("mounted")
#define STATE_PLUGGED_LABEL _("plugged")
#define ROOT_CHECK_LABEL _("Upgrade to root")

@ -414,3 +414,7 @@ msgstr ""
#: source/ubl-strings.h:125
msgid "plugged"
msgstr ""
#: source/ubl-strings.h:127
msgid "Upgrade to root"
msgstr ""

@ -417,3 +417,7 @@ msgstr "примонтирован"
#: source/ubl-strings.h:125
msgid "plugged"
msgstr "подключен"
#: source/ubl-strings.h:127
msgid "Upgrade to root"
msgstr "Повысить права до root"

Loading…
Cancel
Save