You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1043 lines
40 KiB
1043 lines
40 KiB
#include "ublexec.h"
|
|
using namespace std;
|
|
|
|
const string path_app = "/usr/bin/";
|
|
const string path_glade = "/usr/share/ublexec/ui/ublexec.glade";
|
|
const string path_css = "/usr/share/ublexec/css/ublexec.css";
|
|
const string app_name = "ublexec";
|
|
int flag_prog_file = 0;
|
|
string name_app_cmd = "";
|
|
string version_application = "2.24";
|
|
const string path_img_head_background = "/usr/share/ublexec/images/logo-background.png";
|
|
int socket_ext_id_I = 0;
|
|
int socket_trd_id_I = 0;
|
|
|
|
CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help)
|
|
: Glib::OptionGroup{p_name, p_description, p_help} {
|
|
Glib::OptionEntry socketIDArg;
|
|
socketIDArg.set_long_name("socket-id");
|
|
socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN);
|
|
socketIDArg.set_description("Settings manager socket");
|
|
Glib::OptionEntry socketExtId;
|
|
socketExtId.set_long_name("socket-ext-id");
|
|
socketExtId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN);
|
|
socketExtId.set_description("Settings manager secondary socket");
|
|
Glib::OptionEntry socketTrdId;
|
|
socketTrdId.set_long_name("socket-trd-id");
|
|
socketTrdId.set_flags(Glib::OptionEntry::FLAG_IN_MAIN);
|
|
socketTrdId.set_description("Settings manager secondary socket");
|
|
add_entry(socketIDArg, m_socketID);
|
|
add_entry(socketExtId, socket_ext_id_I);
|
|
add_entry(socketTrdId, socket_trd_id_I);
|
|
}
|
|
::Window CmdArgParser::GetSocketID() const{
|
|
return m_socketID;
|
|
}
|
|
|
|
MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr<Gtk::Builder> const& builder)
|
|
: Gtk::ApplicationWindow(obj), builder{builder} {
|
|
this->builder = builder;
|
|
this->settings();
|
|
}
|
|
|
|
MainWindow::MainWindow(Glib::RefPtr<Gtk::Builder> const& builder) {
|
|
this->builder = builder;
|
|
this->settings();
|
|
}
|
|
|
|
void MainWindow::get_builder() {
|
|
builder->get_widget("imgHeadBackground", imgHeadBackground);
|
|
builder->get_widget("overHead", overHead);
|
|
builder->get_widget("btnFilemaneg", btnFilemaneg);
|
|
builder->get_widget("btnListApp", btnListApp);
|
|
builder->get_widget("btnStart", btnStart);
|
|
builder->get_widget("chbTerminal", chbTerminal);
|
|
builder->get_widget("chbAnotherUser", chbAnotherUser);
|
|
builder->get_widget("cbxExecuteEpriority", cbxExecuteEpriority);
|
|
builder->get_widget("cmbUser", cmbUser);
|
|
builder->get_widget("spinPriority", spinPriority);
|
|
builder->get_widget("scalePriority", scalePriority);
|
|
builder->get_widget("rbPkexec", rbPkexec);
|
|
builder->get_widget("rbSu", rbSu);
|
|
builder->get_widget("rbSudo", rbSudo);
|
|
builder->get_widget("txtCmd", txtCmd);
|
|
builder->get_widget("wndChooseFileWallpaper", wndChooseFileWallpaper);
|
|
builder->get_widget("btnFilemangerExit", btnFilemangerExit);
|
|
builder->get_widget("btnFilemangerOk", btnFilemangerOk);
|
|
builder->get_widget("lblTimeEpriorityLow", lblTimeEpriorityLow);
|
|
builder->get_widget("lblTime4EpriorityHigh", lblTime4EpriorityHigh);
|
|
builder->get_widget("messageError", messageError);
|
|
builder->get_widget("lblMessageError", lblMessageError);
|
|
builder->get_widget("btnMessageErrorOk", btnMessageErrorOk);
|
|
builder->get_widget("dialogStartMenu", dialogStartMenu);
|
|
builder->get_widget("btnStartMenuOK", btnStartMenuOK);
|
|
builder->get_widget("btnStartMenuExit", btnStartMenuExit);
|
|
builder->get_widget("lblInfoHead", lblInfoHead);
|
|
builder->get_widget("lblinfoCmd", lblinfoCmd);
|
|
builder->get_widget("lblInfoTime", lblInfoTime);
|
|
builder->get_widget("labInfoExecutTerm", labInfoExecutTerm);
|
|
builder->get_widget("lblInfoUser", lblInfoUser);
|
|
builder->get_widget("lblInfoUserOther", lblInfoUserOther);
|
|
builder->get_widget("lblInfoUserName", lblInfoUserName);
|
|
builder->get_widget("lblInfoNooPriority", lblInfoNooPriority);
|
|
builder->get_widget("lblInfoExec", lblInfoExec);
|
|
builder->get_widget("lblInfoPriority", lblInfoPriority);
|
|
builder->get_widget("boxColor", boxColor);
|
|
builder->get_widget("lblGraphics", lblGraphics);
|
|
builder->get_widget("lblTools", lblTools);
|
|
builder->get_widget("lblInternet", lblInternet);
|
|
builder->get_widget("lblMultimedia", lblMultimedia);
|
|
builder->get_widget("lblSettings", lblSettings);
|
|
builder->get_widget("lblEducation", lblEducation);
|
|
builder->get_widget("lblOffice", lblOffice);
|
|
builder->get_widget("lblOther", lblOther);
|
|
builder->get_widget("lblDevelopment", lblDevelopment);
|
|
builder->get_widget("iconGraphics", iconGraphics);
|
|
builder->get_widget("iconTools", iconTools);
|
|
builder->get_widget("iconInternet", iconInternet);
|
|
builder->get_widget("iconMultimedia", iconMultimedia);
|
|
builder->get_widget("iconSettings", iconSettings);
|
|
builder->get_widget("iconEducation", iconEducation);
|
|
builder->get_widget("iconOffice", iconOffice);
|
|
builder->get_widget("iconOther", iconOther);
|
|
builder->get_widget("iconDevelopment", iconDevelopment);
|
|
builder->get_widget("iconSystem", iconSystem);
|
|
builder->get_widget("lblSystem", lblSystem);
|
|
builder->get_widget("lblHeaderName", lblHeaderName);
|
|
builder->get_widget("btnSynopsis", btnSynopsis);
|
|
builder->get_widget("btnAbout", btnAbout);
|
|
builder->get_widget("aboutWindows", aboutWindows);
|
|
builder->get_widget("btnSettings", btnSettings);
|
|
builder->get_widget("btnBoxAboutDialog", btnBoxAboutDialog);
|
|
builder->get_widget("boxAbout", boxAbout);
|
|
builder->get_widget("cmbTerminal", cmbTerminal);
|
|
|
|
builder->get_widget("lblwebHeaderName", lblwebHeaderName);
|
|
builder->get_widget("lblhelpText", lblhelpText);
|
|
builder->get_widget("lblhelpHeader", lblhelpHeader);
|
|
builder->get_widget("chkAlwaysOpenHelp", chkAlwaysOpenHelp);
|
|
builder->get_widget("btnReadHelp", btnReadHelp);
|
|
builder->get_widget("btnCancelHelp", btnCancelHelp);
|
|
builder->get_widget("wndShowWeb", wndShowWeb);
|
|
builder->get_widget("lblHeadeWndWeb", lblHeadeWndWeb);
|
|
|
|
#ifdef WEBKIT_FOUND
|
|
builder->get_widget("wndWeb", wndWeb);
|
|
#endif
|
|
}
|
|
|
|
void MainWindow::set_icon_array() {
|
|
array_icon[0] = this->iconGraphics;
|
|
array_icon[1] = this->iconTools;
|
|
array_icon[2] = this->iconInternet;
|
|
array_icon[3] = this->iconMultimedia;
|
|
array_icon[4] = this->iconSettings;
|
|
array_icon[5] = this->iconEducation;
|
|
array_icon[6] = this->iconOffice;
|
|
array_icon[7] = this->iconOther;
|
|
array_icon[8] = this->iconDevelopment;
|
|
array_icon[9] = this->iconSystem;
|
|
}
|
|
|
|
void MainWindow::template_apps_obj(Gtk::IconView *icon, Glib::RefPtr<Gtk::ListStore> >k_list_app) {
|
|
gtk_list_app = Gtk::ListStore::create(m_Columns);
|
|
gtk_list_app->set_sort_column(m_Columns.m_col_description, Gtk::SORT_ASCENDING);
|
|
icon->set_model(gtk_list_app);
|
|
icon->set_text_column(m_Columns.m_col_description);
|
|
}
|
|
|
|
void MainWindow::add_CSS() {
|
|
Glib::RefPtr<Gtk::CssProvider> cssProvider = Gtk::CssProvider::create();
|
|
cssProvider->load_from_path(path_css);
|
|
Glib::RefPtr<Gtk::StyleContext> styleContext = Gtk::StyleContext::create();
|
|
Glib::RefPtr<Gdk::Screen> screen = Gdk::Screen::get_default();//get default screen
|
|
styleContext->add_provider_for_screen(screen, cssProvider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);//add provider for screen in all application
|
|
Glib::RefPtr<Gtk::StyleContext> context_lbl_head = lblInfoHead->get_style_context();
|
|
Glib::RefPtr<Gtk::StyleContext> boxAbout_css = boxAbout->get_style_context();
|
|
imgHeadBackground->set(path_img_head_background);
|
|
for (auto &view: array_icon) {
|
|
Glib::RefPtr<Gtk::StyleContext> view_css = view->get_style_context();
|
|
view_css->add_class("view_app");
|
|
}
|
|
context_lbl_head->add_class("textHead");
|
|
if (socket_ext_id_I == 0){
|
|
boxAbout_css->add_class("bkim_no_plug");
|
|
}
|
|
}
|
|
|
|
void MainWindow::localization() {
|
|
time_t now = time(0);
|
|
tm *ltm = localtime(&now);
|
|
unsigned int year= 1900+ ltm->tm_year;
|
|
string str_authors = string(gettext("Copyright © UBSoft LLC, 2022 - ")) + to_string(year);
|
|
aboutWindows->set_copyright(str_authors);
|
|
aboutWindows->set_website(gettext("https://wiki.ublinux.com"));
|
|
btnSynopsis->set_label(gettext("Help"));
|
|
btnAbout->set_label(gettext("About"));
|
|
aboutWindows->set_comments(gettext("Run as..."));
|
|
aboutWindows->set_website_label(gettext("Project Home Page"));
|
|
aboutWindows->set_version(gettext(version_application.c_str()));
|
|
aboutWindows->set_title(gettext(" Run as..."));
|
|
lblHeaderName->set_text(gettext("Run as..."));
|
|
this->set_title(gettext("Run as..."));
|
|
btnStart->set_label(gettext("Run"));
|
|
wndChooseFileWallpaper->set_title(gettext("Please select File"));
|
|
dialogStartMenu->set_title(gettext("Selecting Programs"));
|
|
lblInfoHead->set_text(gettext("Run applications as another user\nwith the specified priority"));
|
|
lblinfoCmd->set_text(gettext("Command Line"));
|
|
lblInfoTime->set_text(gettext("Team:"));
|
|
labInfoExecutTerm->set_text(gettext("Run in the terminal emulator"));
|
|
lblInfoUser->set_text(gettext("User"));
|
|
lblInfoUserOther->set_text(gettext("Run as another user:"));
|
|
lblInfoUserName->set_text(gettext("User Name:"));
|
|
lblInfoNooPriority->set_text(gettext("Priority"));
|
|
lblInfoExec->set_text(gettext("Change startup priority"));
|
|
lblInfoPriority->set_text(gettext("Priority:"));
|
|
lblMessageError->set_text(gettext("Select an executable file or program"));
|
|
messageError->set_title(gettext("Attention"));
|
|
lblGraphics->set_text(gettext("Graphics"));
|
|
lblTools->set_text(gettext("Tools"));
|
|
lblInternet->set_text(gettext("Internet"));
|
|
lblMultimedia->set_text(gettext("Multimedia"));
|
|
lblSettings->set_text(gettext("Settings"));
|
|
lblEducation->set_text(gettext("Education"));
|
|
lblOffice->set_text(gettext("Office"));
|
|
lblOther->set_text(gettext("Other"));
|
|
lblDevelopment->set_text(gettext("Development"));
|
|
lblSystem->set_text(gettext("System"));
|
|
btnListApp->set_tooltip_text(gettext("Application Overview"));
|
|
btnFilemaneg->set_tooltip_text(gettext("File Overview"));
|
|
btnMessageErrorOk->set_label(gettext("Close"));
|
|
lblhelpHeader->set_text(_("Would you like to read documentation in the Web?"));
|
|
lblhelpText->set_text(_("You will be redirected to documentation site, where user help pages are "
|
|
"translated and supported by community."));
|
|
btnReadHelp->set_label(_("Read online"));
|
|
btnCancelHelp->set_label(_("Cancel"));
|
|
chkAlwaysOpenHelp->set_label(_("Always redirect"));
|
|
lblwebHeaderName->set_label(_("ubl-settings-bootloader"));
|
|
lblHeadeWndWeb->set_label(_("Run as..."));
|
|
}
|
|
|
|
void MainWindow::event() {
|
|
btnCancelHelp->signal_clicked().connect([&]() {wndShowWeb->hide();});
|
|
chkAlwaysOpenHelp->signal_toggled().connect([&]() {flag_open_browser = true;});
|
|
btnReadHelp->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_browser));
|
|
btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show));
|
|
btnFilemaneg->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_filemaneg));
|
|
btnListApp->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::open_list_app));
|
|
btnStart->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::entry_app));
|
|
chbTerminal->signal_toggled().connect([&]() {cmbTerminal->set_sensitive(chbTerminal->get_active());denamic_cmd();});
|
|
chbAnotherUser->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::activ_or_block_other_user));
|
|
spinPriority->signal_value_changed().connect(sigc::mem_fun(*this, &MainWindow::change_scale_priority));
|
|
scalePriority->signal_value_changed().connect(sigc::mem_fun(*this, &MainWindow::change_spin_priority));
|
|
btnFilemangerExit->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::close_filemaneg));
|
|
btnFilemangerOk->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::get_path_filemaneg));
|
|
cbxExecuteEpriority->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::activ_or_block_execute_epriority));
|
|
btnMessageErrorOk->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::message_gui_close));
|
|
btnStartMenuOK->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::start_menu_entry_app));
|
|
btnStartMenuExit->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::close_entry_app));
|
|
btnStartMenuOK->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::ok_close_entry_app));
|
|
iconGraphics->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Graphics));
|
|
iconTools->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Tools));
|
|
iconInternet->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Internet));
|
|
iconMultimedia->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Multimedia));
|
|
iconSettings->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Settings));
|
|
iconEducation->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Education));
|
|
iconOffice->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Office));
|
|
iconOther->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Other));
|
|
iconDevelopment->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_Development));
|
|
iconSystem->signal_selection_changed().connect(sigc::mem_fun(*this,&MainWindow::select_System));
|
|
btnSynopsis->signal_activate().connect(sigc::mem_fun(*this, &MainWindow::synopsis_show));
|
|
btnAbout->signal_activate().connect([&]() {aboutWindows->show();});
|
|
cmbUser->signal_changed().connect([&]() {changed_user();this->denamic_cmd();});
|
|
rbSudo->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::sudo_nice));
|
|
txtCmd->signal_focus_out_event().connect(sigc::mem_fun(*this, &MainWindow::focus_out_txt_cmd));
|
|
txtCmd->signal_focus_in_event().connect(sigc::mem_fun(*this, &MainWindow::focus_in_txt_cmd));
|
|
txtCmd->signal_delete_text().connect(sigc::mem_fun(*this, &MainWindow::delete_cmd));
|
|
rbSu->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::sudo_nice));
|
|
rbPkexec->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::sudo_nice));
|
|
cmbTerminal->signal_changed().connect([&]() {this->denamic_cmd();});
|
|
}
|
|
|
|
|
|
void MainWindow::sudo_nice(){
|
|
string response = this->call("id -Gn");
|
|
if (geteuid() == 0 || cmbUser->get_active_text() == "root" ){
|
|
spinPriority->set_range(-20, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(-20, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("-20 (High)"));
|
|
}
|
|
else if (rbSudo->get_active() && response.find("wheel") != string::npos){
|
|
spinPriority->set_range(-20, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(-20, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("-20 (High)"));
|
|
}
|
|
else if (rbSu->get_active()){
|
|
spinPriority->set_range(0, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(0, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("0 (High)"));
|
|
}
|
|
else if (rbPkexec->get_active()){
|
|
spinPriority->set_range(0, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(0, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("0 (High)"));
|
|
}
|
|
this->denamic_cmd();
|
|
}
|
|
|
|
void MainWindow::changed_user() {
|
|
Glib::ustring entry_user = cmbUser->get_active_text();
|
|
string response = this->call("id -Gn");
|
|
bool flag_wheel_sudo = (rbSudo->get_active()==true && response.find("wheel") != string::npos);
|
|
if (geteuid() == 0 || entry_user == "root" || flag_wheel_sudo==true) {
|
|
spinPriority->set_range(-20, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(-20, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("-20 (High)"));
|
|
}
|
|
else{
|
|
spinPriority->set_range(0, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(0, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("0 (High)"));
|
|
}
|
|
}
|
|
|
|
void MainWindow::delete_cmd(const int &x, const int &y) {
|
|
if (x == 0) {}
|
|
if (y > 1) {
|
|
chbTerminal->set_active(false);
|
|
chbAnotherUser->set_active(false);
|
|
cbxExecuteEpriority->set_active(false);
|
|
name_app = "";
|
|
path_file = "";
|
|
user_cmd = "";
|
|
txtCmd->set_text("");
|
|
}
|
|
}
|
|
|
|
bool MainWindow::focus_in_txt_cmd(GdkEventFocus* event) {
|
|
if (event) {}
|
|
if (user_cmd.length() != 0) {
|
|
}
|
|
else if (name_app.length() != 0) {
|
|
}
|
|
else if (path_file.length() != 0) {
|
|
}
|
|
else{
|
|
user_cmd = txtCmd->get_text();
|
|
}
|
|
cmd_old = txtCmd->get_text();
|
|
return true;
|
|
}
|
|
|
|
void MainWindow::synopsis_show() {
|
|
if (flag_open_browser == true) {
|
|
this->open_browser();
|
|
}
|
|
else {
|
|
wndShowWeb->show_all();
|
|
}
|
|
|
|
}
|
|
|
|
void MainWindow::open_browser() {
|
|
#ifdef WEBKIT_FOUND
|
|
webkit_web_view_load_uri(one, link_doc);
|
|
wndWeb->show_all();
|
|
#else
|
|
string cmd = cmd_xdg + string(gettext(link_doc)) + " &";
|
|
string buf = "";
|
|
if (geteuid() == 0) {
|
|
string response_user = getlogin();
|
|
int size_s = std::snprintf(nullptr, 0, cmd_execute, response_user.c_str(), cmd.c_str()) + 1;
|
|
auto size = static_cast<size_t>(size_s);
|
|
std::unique_ptr<char[]> buf(new char[ size ]);
|
|
std::snprintf( buf.get(), size, cmd_execute, response_user.c_str(), cmd.c_str() );
|
|
cmd = std::string( buf.get(), buf.get() + size - 1 );
|
|
}
|
|
index_error = system(cmd.c_str());
|
|
#endif
|
|
}
|
|
|
|
void MainWindow::icon_clear() {
|
|
list_Graphics->clear();
|
|
list_Tools->clear();
|
|
list_Internet->clear();
|
|
list_Multimedia->clear();
|
|
list_Settings->clear();
|
|
list_Education->clear();
|
|
list_Office->clear();
|
|
list_Other->clear();
|
|
list_Development->clear();
|
|
list_System->clear();
|
|
}
|
|
|
|
void MainWindow::ok_close_entry_app() {
|
|
this->icon_clear();
|
|
dialogStartMenu->hide();
|
|
}
|
|
|
|
void MainWindow::select_Graphics() {
|
|
this->tempate_icon_select(this->iconGraphics, list_Graphics);
|
|
}
|
|
void MainWindow::select_Tools() {
|
|
this->tempate_icon_select(this->iconTools, list_Tools);
|
|
}
|
|
void MainWindow::select_Internet() {
|
|
this->tempate_icon_select(this->iconInternet, list_Internet);
|
|
}
|
|
void MainWindow::select_Multimedia() {
|
|
this->tempate_icon_select(this->iconMultimedia, list_Multimedia);
|
|
}
|
|
void MainWindow::select_Settings() {
|
|
this->tempate_icon_select(this->iconSettings, list_Settings);
|
|
}
|
|
void MainWindow::select_Education() {
|
|
this->tempate_icon_select(this->iconEducation, list_Education);
|
|
}
|
|
void MainWindow::select_Office() {
|
|
this->tempate_icon_select(this->iconOffice, list_Office);
|
|
}
|
|
void MainWindow::select_Other() {
|
|
this->tempate_icon_select(this->iconOther, list_Other);
|
|
}
|
|
void MainWindow::select_Development() {
|
|
this->tempate_icon_select(this->iconDevelopment, list_Development);
|
|
}
|
|
void MainWindow::select_System() {
|
|
this->tempate_icon_select(this->iconSystem, list_System);
|
|
}
|
|
void MainWindow::tempate_icon_select(Gtk::IconView *icon, Glib::RefPtr<Gtk::ListStore> >k_list) {
|
|
auto selected = (*icon).get_selected_items();
|
|
if(!selected.empty()) {
|
|
this->set_icon_array();
|
|
this->unselect_icon(icon);
|
|
const Gtk::TreeModel::Path& path = *selected.begin();
|
|
Gtk::TreeModel::iterator iter = gtk_list->get_iter(path);
|
|
Gtk::TreeModel::Row row = *iter;
|
|
auto app_name_exec = row[m_Columns.app_name_exec];
|
|
const Glib::ustring description = row[m_Columns.m_col_description];
|
|
path_file = "";
|
|
name_app = "";
|
|
user_cmd = "";
|
|
txtCmd->set_text(app_name_exec);
|
|
name_app = txtCmd->get_text();
|
|
size_t len_name_app = name_app.length();
|
|
string array_del[] = {"%f", "%F", "%d", "%D", "%n", "%N", "%U"};
|
|
for (auto &del_sim: array_del) {
|
|
str_remove(name_app, del_sim);
|
|
if (name_app.length() != len_name_app) {
|
|
txtCmd->set_text(name_app);
|
|
break;
|
|
}
|
|
}
|
|
this->denamic_cmd();
|
|
|
|
}
|
|
}
|
|
|
|
void MainWindow::unselect_icon(Gtk::IconView *icon_entry) {
|
|
for (int index=0; index<10; ++index) {
|
|
Gtk::IconView *icon = this->array_icon[index];
|
|
if (icon_entry != icon) {
|
|
icon->unselect_all();
|
|
}
|
|
}
|
|
}
|
|
|
|
void MainWindow::settings() {
|
|
if (flag_prog_file == 1){
|
|
user_cmd = name_app_cmd;
|
|
}
|
|
if (flag_prog_file == 2){
|
|
path_file = name_app_cmd;
|
|
}
|
|
|
|
this->pars_apps();
|
|
this->get_builder();
|
|
this->event();
|
|
this->localization();
|
|
this->set_icon_array();
|
|
this->add_CSS();
|
|
spinPriority->set_range(0, 19);
|
|
spinPriority->set_increments(1.0, -1.0);
|
|
scalePriority->set_range(0, 19);
|
|
scalePriority->set_value(0);
|
|
lblTimeEpriorityLow->set_text(gettext("19 (Low)"));
|
|
lblTime4EpriorityHigh->set_text(gettext("0 (High)"));
|
|
scalePriority->set_inverted(true);
|
|
Gtk::Widget *boxWidget;
|
|
builder->get_widget("boxColor", boxWidget);
|
|
overHead->add_overlay(*boxWidget);
|
|
this->pars_dir_bin();
|
|
this->pars_dir_terminal();
|
|
this->pars_users();
|
|
this->is_user_wheel();
|
|
cmbUser->set_active_text(user_exec_app);
|
|
this->activ_or_block_execute_epriority();
|
|
this->changed_user();
|
|
cmbUser->set_sensitive(false);
|
|
lblInfoUserName->set_sensitive(false);
|
|
rbPkexec->set_sensitive(false);
|
|
rbSu->set_sensitive(false);
|
|
rbSudo->set_sensitive(false);
|
|
btnBoxAboutDialog->set_visible(false);
|
|
cmbTerminal->set_sensitive(false);
|
|
ubl_make_plugs(boxAbout, boxAbout, socket_ext_id_I, 0);
|
|
#ifdef WEBKIT_FOUND
|
|
one = WEBKIT_WEB_VIEW( webkit_web_view_new() );
|
|
three = Glib::wrap(GTK_WIDGET(one));
|
|
wndWeb->add(*three);
|
|
#endif
|
|
}
|
|
|
|
void MainWindow::close_entry_app() {
|
|
this->icon_clear();
|
|
dialogStartMenu->hide();
|
|
}
|
|
|
|
void MainWindow::start_menu_entry_app() {}
|
|
|
|
void MainWindow::message_gui_close() {
|
|
messageError->hide();
|
|
}
|
|
|
|
void MainWindow::activ_or_block_execute_epriority() {
|
|
bool flag = cbxExecuteEpriority->get_active();
|
|
scalePriority->set_sensitive(flag);
|
|
spinPriority->set_sensitive(flag);
|
|
lblTimeEpriorityLow->set_sensitive(flag);
|
|
lblTime4EpriorityHigh->set_sensitive(flag);
|
|
this->denamic_cmd();
|
|
}
|
|
|
|
void MainWindow::open_filemaneg() {
|
|
wndChooseFileWallpaper->set_current_folder("/bin/");
|
|
wndChooseFileWallpaper->show();
|
|
}
|
|
|
|
void MainWindow::close_filemaneg() {
|
|
wndChooseFileWallpaper->hide();
|
|
}
|
|
|
|
void MainWindow::get_path_filemaneg() {
|
|
name_app = "";
|
|
user_cmd = "";
|
|
path_file = wndChooseFileWallpaper->get_filename();
|
|
if (path_file.length() == 0) {}
|
|
else{
|
|
txtCmd->set_text(path_file);
|
|
this->close_filemaneg();
|
|
|
|
}
|
|
this->denamic_cmd();
|
|
}
|
|
|
|
vector <size_t> MainWindow::find_all(string &text, string &word) {
|
|
size_t index{};
|
|
vector <size_t> list_index;
|
|
while ((index = text.find(word, index)) != std::string::npos)
|
|
{
|
|
index += word.length();
|
|
list_index.push_back(index);
|
|
}
|
|
return list_index;
|
|
}
|
|
|
|
void MainWindow::tempalte_row(string Name, string Exec, string path , Glib::RefPtr<Gtk::ListStore> &dtk_list) {
|
|
Gtk::TreeModel::Row row = *(dtk_list->append());
|
|
string s_remove[] = {".png", ".jpg", ".jpeg", ".svg", ".xpm"};
|
|
string str_search = "/";
|
|
if (path.find(str_search) != string::npos){
|
|
vector <size_t> list_index = this->find_all(path, str_search);
|
|
int index = list_index.size();
|
|
if (index>1){
|
|
index = index-1;
|
|
index = list_index.at(index);
|
|
if (index){
|
|
size_t len_path = path.length();
|
|
path = path.substr(index, len_path);
|
|
}
|
|
}
|
|
}
|
|
for (string &del: s_remove){
|
|
if (path.find(del) != string::npos){
|
|
str_remove(path, del);
|
|
}
|
|
}
|
|
row[m_Columns.m_col_filename] = path;
|
|
row[m_Columns.m_col_description] = Name;
|
|
row[m_Columns.icon_name] = path;
|
|
row[m_Columns.app_name_exec] = Exec;
|
|
row[m_Columns.float_h_align] = 0.5;
|
|
row[m_Columns.float_w_align] = 0.5;
|
|
}
|
|
|
|
void MainWindow::open_list_app() {
|
|
this->template_apps_obj(iconGraphics, list_Graphics);
|
|
this->template_apps_obj(iconTools, list_Tools);
|
|
this->template_apps_obj(iconInternet, list_Internet);
|
|
this->template_apps_obj(iconMultimedia, list_Multimedia);
|
|
this->template_apps_obj(iconSettings, list_Settings);
|
|
this->template_apps_obj(iconEducation, list_Education);
|
|
this->template_apps_obj(iconOffice, list_Office);
|
|
this->template_apps_obj(iconOther, list_Other);
|
|
this->template_apps_obj(iconDevelopment, list_Development);
|
|
this->template_apps_obj(iconSystem, list_System);
|
|
string path = "";
|
|
for ( const auto &st_app: list_app) {
|
|
for ( const auto &str_categor: st_app.Categories) {
|
|
path = st_app.Icon;
|
|
if (str_categor == "Graphics") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Graphics);
|
|
}
|
|
else if (str_categor == "Utility") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Tools);
|
|
}
|
|
else if (str_categor == "Network") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Internet);
|
|
}
|
|
else if (str_categor == "AudioVideo") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Multimedia);
|
|
}
|
|
else if (str_categor == "Settings") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Settings);
|
|
}
|
|
else if (str_categor == "Education") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Education);
|
|
}
|
|
else if (str_categor == "Office") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Office);
|
|
}
|
|
else if (str_categor == "Other") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Other);
|
|
}
|
|
else if (str_categor == "Development") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_Development);
|
|
}
|
|
else if (str_categor == "System") {
|
|
this->tempalte_row(st_app.Name,st_app.Exec, path, list_System);
|
|
}
|
|
}
|
|
}
|
|
dialogStartMenu->show_all();
|
|
}
|
|
|
|
|
|
string MainWindow::start_cmd(string user_cmd) {
|
|
string str_cmd_terminal = "";
|
|
string str_variants_root = "";
|
|
string str_nice_cmd = "";
|
|
if (chbAnotherUser->get_active()) {
|
|
if (rbPkexec->get_active()) {
|
|
str_variants_root = "pkexec --user " + cmbUser->get_active_text();
|
|
if (cbxExecuteEpriority->get_active()) {
|
|
str_variants_root += " nice -n " + to_string(spinPriority->get_value_as_int());
|
|
}
|
|
str_variants_root += " env PATH=$PATH DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ";
|
|
}
|
|
else if (rbSu->get_active()) {
|
|
chbTerminal->set_active(true);
|
|
string str_user = cmbUser->get_active_text();
|
|
if (str_user != "root") {
|
|
str_variants_root = "su -l " + cmbUser->get_active_text();
|
|
}
|
|
else{
|
|
str_variants_root = "su ";
|
|
}
|
|
str_variants_root += " -c \" DISPLAY=$DISPLAY ";
|
|
if (cbxExecuteEpriority->get_active()) {
|
|
str_variants_root += "nice -n " + to_string(spinPriority->get_value_as_int()) + " ";
|
|
}
|
|
}
|
|
else if (rbSudo->get_active()) {
|
|
chbTerminal->set_active(true);
|
|
if (user_exec_app==cmbUser->get_active_text()) {
|
|
str_variants_root = "sudo ";
|
|
}
|
|
else{
|
|
str_variants_root = "sudo -u " + cmbUser->get_active_text() + " ";
|
|
}
|
|
if (cbxExecuteEpriority->get_active()) {
|
|
str_variants_root += "nice -n " + to_string(spinPriority->get_value_as_int()) + " ";
|
|
}
|
|
}
|
|
}
|
|
if (cmbUser->get_active_text().length() != 0) {
|
|
string user_cmd_X = "xhost +SI:localuser:";
|
|
user_cmd_X += cmbUser->get_active_text();
|
|
user_cmd_X += " > /dev/null 2>&1";
|
|
index_error = system(user_cmd_X.c_str());
|
|
}
|
|
if ((cbxExecuteEpriority->get_active()) && (chbAnotherUser->get_active() == false)) {
|
|
str_nice_cmd = "nice -n " + to_string(spinPriority->get_value_as_int()) + " ";
|
|
}
|
|
if (user_cmd.length() == 0 && name_app.length() == 0 && path_file.length() == 0) {
|
|
messageError->set_title(gettext("Attention"));
|
|
messageError->show();
|
|
return "";
|
|
}
|
|
if (chbTerminal->get_active() == true) {
|
|
string name_terminal_arr = "";
|
|
string name_terminal = cmbTerminal->get_active_text();
|
|
if (name_terminal.length() != 0) {
|
|
int len_termunal_cmd = sizeof(termunal_cmd)/sizeof(*termunal_cmd);
|
|
for (int index = 0; index<len_termunal_cmd; index++) {
|
|
name_terminal_arr = termunal_cmd[index];
|
|
size_t index_term = name_terminal_arr.find(" ");
|
|
if (index_term != string::npos) {
|
|
name_terminal_arr =name_terminal_arr.substr(0, index_term);
|
|
if (name_terminal == name_terminal_arr) {
|
|
str_cmd_terminal = termunal_cmd[index];
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
else{
|
|
str_cmd_terminal = "";
|
|
}
|
|
|
|
}
|
|
else{
|
|
str_cmd_terminal = "";
|
|
}
|
|
string cmd = "";
|
|
if (path_file.length() > 0) {
|
|
if (access(path_file.c_str(), X_OK) != -1) {
|
|
cmd = str_nice_cmd + str_cmd_terminal + str_variants_root + " " + path_file;
|
|
}
|
|
else{
|
|
cmd = str_nice_cmd + str_cmd_terminal + str_variants_root + " xdg-open '" + path_file + "' ";
|
|
}
|
|
|
|
}
|
|
else if (name_app.length() > 0) {
|
|
cmd = str_nice_cmd + str_cmd_terminal + str_variants_root + name_app;
|
|
}
|
|
else if (user_cmd.length() > 0) {
|
|
cmd = str_nice_cmd + str_cmd_terminal + str_variants_root + " " + user_cmd;
|
|
}
|
|
if ((cmd.find("-e su ") != string::npos) || (cmd.find("-x su ") != string::npos)) {
|
|
cmd+=" \"";
|
|
}
|
|
cmd = "nohup " + cmd;
|
|
cmd += " > /dev/null 2>&1";
|
|
return cmd;
|
|
}
|
|
|
|
void MainWindow::call_app(string &cmd) {
|
|
if (cmd.length() != 0) {
|
|
std::thread t([&](string cmd) {int index = system(cmd.c_str()); if (index){}}, cmd);
|
|
t.detach();
|
|
}
|
|
}
|
|
void MainWindow::denamic_cmd() {
|
|
if (chbTerminal->get_active() == true || chbAnotherUser->get_active() == true || cbxExecuteEpriority->get_active() == true) {
|
|
if (txtCmd->get_text().length() == 0) {
|
|
chbTerminal->set_active(false);
|
|
chbAnotherUser->set_active(false);
|
|
cbxExecuteEpriority->set_active(false);
|
|
path_file = "";
|
|
name_app = "";
|
|
user_cmd = "";
|
|
txtCmd->set_text(user_cmd);
|
|
messageError->set_title(gettext("Attention"));
|
|
messageError->show();
|
|
}
|
|
else{
|
|
txtCmd->set_text(this->start_cmd(user_cmd));
|
|
}
|
|
}
|
|
else{
|
|
if (user_cmd.length() != 0) {
|
|
txtCmd->set_text(this->start_cmd(user_cmd));
|
|
}
|
|
else if (path_file.length() != 0) {
|
|
txtCmd->set_text(this->start_cmd(user_cmd));
|
|
}
|
|
else if (name_app.length() != 0) {
|
|
txtCmd->set_text(this->start_cmd(user_cmd));
|
|
}
|
|
}
|
|
}
|
|
|
|
string MainWindow::call(string cmd) {
|
|
FILE *fp;
|
|
int status;
|
|
char path[PATH_MAX] = {0};
|
|
fp = popen(cmd.c_str(), "r");
|
|
if (fp == NULL) {
|
|
exit(1);
|
|
}
|
|
while (fgets(path, PATH_MAX, fp) != NULL) {
|
|
break;
|
|
}
|
|
status = pclose(fp);
|
|
if (status == -1) {
|
|
exit(1);
|
|
}
|
|
return path;
|
|
}
|
|
|
|
bool MainWindow::focus_out_txt_cmd(GdkEventFocus* event) {
|
|
if (event) {}
|
|
if (cmd_old != txtCmd->get_text()) {
|
|
user_cmd = txtCmd->get_text();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void MainWindow::entry_app() {
|
|
this->denamic_cmd();
|
|
if (name_app.length() == 0 && path_file.length() == 0) {
|
|
}
|
|
string cmd = txtCmd->get_text();
|
|
this->call_app(cmd);
|
|
}
|
|
|
|
void MainWindow::activ_or_block_other_user() {
|
|
bool flag = chbAnotherUser->get_active();
|
|
cmbUser->set_sensitive(flag);
|
|
lblInfoUserName->set_sensitive(flag);
|
|
if (flag_pkexec == true) {
|
|
rbPkexec->set_sensitive(flag);
|
|
}
|
|
if (flag_su == true) {
|
|
rbSu->set_sensitive(flag);
|
|
}
|
|
if (flag_sudo == true) {
|
|
rbSudo->set_sensitive(flag);
|
|
}
|
|
this->denamic_cmd();
|
|
}
|
|
|
|
void MainWindow::change_scale_priority() {
|
|
scalePriority->set_value(spinPriority->get_value_as_int());
|
|
this->denamic_cmd();
|
|
}
|
|
|
|
void MainWindow::change_spin_priority() {
|
|
spinPriority->set_value(scalePriority->get_value());
|
|
this->denamic_cmd();
|
|
}
|
|
|
|
void MainWindow::pars_dir_bin() {
|
|
namespace fs = std::filesystem;
|
|
std::string path = "/bin";
|
|
string file_name = "";
|
|
for (const auto & entry: fs::directory_iterator(path)) {
|
|
file_name = entry.path().filename().string();
|
|
if (file_name == "su") {
|
|
flag_su = true;
|
|
}
|
|
else if (file_name == "sudo") {
|
|
flag_sudo = true;
|
|
}
|
|
else if (file_name == "pkexec") {
|
|
flag_pkexec = true;
|
|
}
|
|
}
|
|
rbPkexec->set_sensitive(flag_pkexec);
|
|
rbSu->set_sensitive(flag_su);
|
|
rbSudo->set_sensitive(flag_sudo);
|
|
}
|
|
|
|
void MainWindow::pars_dir_terminal() {
|
|
namespace fs = std::filesystem;
|
|
std::string path = "/bin";
|
|
string file_name = "";
|
|
string name_terminal = "";
|
|
for (const auto & entry: fs::directory_iterator(path)) {
|
|
file_name = entry.path().filename().string();
|
|
int len_termunal_cmd = sizeof(termunal_cmd)/sizeof(*termunal_cmd);
|
|
for (int index = 0; index < len_termunal_cmd; ++index) {
|
|
name_terminal = termunal_cmd[index];
|
|
size_t index_term = name_terminal.find(" ");
|
|
if (index_term != string::npos){
|
|
name_terminal = name_terminal.substr(0, index_term);
|
|
if (name_terminal == file_name) {
|
|
cmbTerminal->append(name_terminal);
|
|
cmbTerminal->set_active_text(name_terminal);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void MainWindow::is_user_wheel(){
|
|
string response = this->call("id -Gn");
|
|
if (response.find("wheel") == string::npos){
|
|
flag_sudo = false;
|
|
rbSudo->set_sensitive(flag_sudo);
|
|
}
|
|
size_t user_index = response.find(" ");
|
|
if (user_index!=string::npos){
|
|
user_exec_app = response.substr(0, user_index);
|
|
}
|
|
}
|
|
|
|
unsigned short MainWindow::read_uid_min_max(string filename, string search){
|
|
std::string line;
|
|
int uid = 0;
|
|
string remove_tab = "\t";
|
|
string remove_space = " ";
|
|
std::ifstream in(filename); // окрываем файл для чтения
|
|
if (in.is_open()){
|
|
while (getline(in, line)){
|
|
try{
|
|
if (line.find(search) != string::npos && (line.find("SYS_"+search) == string::npos)) {
|
|
this->str_remove(line, search);
|
|
this->str_remove(line, remove_space);
|
|
this->str_remove(line, remove_tab);
|
|
uid = atoi(line.c_str());
|
|
}
|
|
}
|
|
catch (int x) {
|
|
if (search == "UID_MIN"){
|
|
uid = 1000;
|
|
}
|
|
else{
|
|
uid = 65534;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
else{
|
|
if (search == "UID_MIN") {
|
|
uid = 1000;
|
|
}
|
|
else{
|
|
uid = 65534;
|
|
}
|
|
}
|
|
in.close();
|
|
return uid;
|
|
|
|
}
|
|
|
|
void MainWindow::pars_users() {
|
|
unsigned short uid_min = this->read_uid_min_max("/etc/login.defs", "UID_MIN");
|
|
unsigned short uid_max = this->read_uid_min_max("/etc/login.defs", "UID_MAX");
|
|
while (true) {
|
|
errno = 0;
|
|
passwd* entry = getpwent();
|
|
if (!entry) {
|
|
if (errno) {
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) {
|
|
cmbUser->append(entry->pw_name);
|
|
}
|
|
}
|
|
endpwent();
|
|
}
|
|
|
|
vector<std::string> MainWindow::split(const std::string &s, char delim) {
|
|
std::stringstream ss(s);
|
|
std::string item;
|
|
std::vector<std::string> elems;
|
|
while (std::getline(ss, item, delim)) {
|
|
elems.push_back(item);
|
|
}
|
|
return elems;
|
|
}
|
|
|
|
void MainWindow::str_remove(std::string& source, std::string to_remove) {
|
|
string::size_type n = to_remove.length();
|
|
for (string::size_type i = source.find(to_remove);
|
|
i != string::npos;
|
|
i = source.find(to_remove))
|
|
source.erase(i, n);
|
|
}
|
|
|
|
void MainWindow::pars_apps() {
|
|
if (list_app.size() != 0 ) {return;}
|
|
namespace fs = std::filesystem;
|
|
struct struct_App App;
|
|
string file_name = "";
|
|
string str_Categories;
|
|
string path = "/usr/share/applications/";
|
|
for (const auto & entry : fs::directory_iterator(path)) {
|
|
file_name = entry.path().filename().string();
|
|
path = "/usr/share/applications/"+file_name;
|
|
if (file_name.find(".desktop") != std::string::npos) {
|
|
GKeyFile *gfile=g_key_file_new();
|
|
g_key_file_load_from_file(gfile, path.c_str(), G_KEY_FILE_KEEP_TRANSLATIONS, NULL);
|
|
char *Type = g_key_file_get_string(gfile, "Desktop Entry", "Type", NULL);
|
|
char *Name = g_key_file_get_locale_string(gfile, "Desktop Entry", "Name", setlocale(LC_ALL, NULL), NULL);
|
|
char *Exec = g_key_file_get_string(gfile, "Desktop Entry", "Exec", NULL);
|
|
char *Categories = g_key_file_get_locale_string(gfile, "Desktop Entry", "Categories", setlocale(LC_ALL, ""), NULL);
|
|
char *Icon = g_key_file_get_string(gfile, "Desktop Entry", "Icon", NULL);
|
|
char *Mime = g_key_file_get_string(gfile, "Desktop Entry", "MimeType", NULL);
|
|
if (Type == NULL) continue;
|
|
if (Name == NULL) continue;
|
|
if (Exec == NULL) continue;
|
|
if (Categories == NULL) continue;
|
|
if (Icon == NULL) continue;
|
|
str_Categories = Categories;
|
|
App.Name = Name;
|
|
App.Type = Type;
|
|
App.Exec = Exec;
|
|
App.Icon = Icon;
|
|
if (Mime != NULL) {
|
|
App.MimeType = Mime;
|
|
}
|
|
else{
|
|
App.MimeType = "";
|
|
}
|
|
App.Name_desktop = file_name;
|
|
App.Categories = split(str_Categories, ';');
|
|
}
|
|
list_app.push_back(App);
|
|
}
|
|
}
|
|
|
|
SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr<Gtk::Builder> builder)
|
|
: Gtk::Plug{p_socketID} {
|
|
MainWindow* wnd = nullptr;
|
|
builder->get_widget_derived("window", wnd);
|
|
builder->get_widget("plugBox", plugBox);
|
|
plugBox->get_parent()->remove(*plugBox);
|
|
add(*plugBox);
|
|
show_all_children();
|
|
}
|
|
|
|
MainWindow::~MainWindow() {
|
|
}
|
|
|
|
void help() {
|
|
string help = "GTK \"Run applications as another user with the specified priority\" for UBLinux\n\n"
|
|
"Usage: ublexec [OPTIONS...]\n"
|
|
"Options:\n"
|
|
" -h, --help Show this help\n"
|
|
" -V, --version Show package version\n"
|
|
" -x APP_NAME Running the program\n"
|
|
" -e FILE_NAME Running the file\n";
|
|
cout << gettext(help.c_str());
|
|
}
|
|
|
|
|
|
|