From 0819e68a89098a3a4c51d21436b3f0b0ebeedc1b Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Wed, 25 Jan 2023 05:47:16 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=B8=D0=BB=20ma?= =?UTF-8?q?kefile=20=D0=B8=20=D0=B8=D0=BA=D0=BE=D0=BD=D0=BA=D0=B8=20=D0=B2?= =?UTF-8?q?=20.glade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 29 ++--- ...x.pkexec.ubl-settings-datetime.exec.policy | 0 source/CMakeLists.txt | 7 +- source/main.cc | 2 +- ...s_datetime.cc => ubl-settings-datetime.cc} | 117 ++++++------------ ...ngs_datetime.h => ubl-settings-datetime.h} | 32 +---- ubl-settings-datetime.glade | 5 +- 7 files changed, 64 insertions(+), 128 deletions(-) rename org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy => ru.ublinux.pkexec.ubl-settings-datetime.exec.policy (100%) rename source/{ubl_settings_datetime.cc => ubl-settings-datetime.cc} (88%) rename source/{ubl_settings_datetime.h => ubl-settings-datetime.h} (91%) diff --git a/Makefile b/Makefile index 9d871e3..376e6da 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,19 @@ #!/usr/bin/make -f +#!/usr/bin/make -f +#SHELL := /bin/bash MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH)))) MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH)) CMAKE_COMMAND = cmake +#CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source +#CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile CMAKE_SOURCE_DIR = ./source CMAKE_BUILD_DIR = ./compile DEPENDS = cmake - -PKGNAME = $(MAKEFILE_DIR) -#PKGNAME = ubl-settings-datetime +#PKGNAME = $(MAKEFILE_DIR) +PKGNAME = ubl-settings-datetime default_target: all all: init build @@ -22,8 +25,8 @@ init: depend: @echo "Check depends ..."; \ if [ ! -f /bin/${DEPENDS} ]; then \ - echo "-- Depend '${DEPENDS}' not fount !"; \ - exit 1; \ + echo "-- Depend '${DEPENDS}' not fount !"; \ + exit 1; \ fi; \ echo "Check depends: OK" # $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 @@ -55,9 +58,6 @@ build: depend prepare @echo "Build ..."; \ make --directory=${CMAKE_BUILD_DIR}; \ echo "Build: OK" - g++ -Werror -Wall -Waddress -Wbool-compare -Wbool-operation -std=c++20 -o source/ubl_settings_datetime.o -c -lstdc++ source/ubl_settings_datetime.cc `pkg-config --cflags --libs gtkmm-3.0` -g; - g++ -Werror -Wall -Waddress -Wbool-compare -Wbool-operation -std=c++20 -o source/main.o -c -lstdc++ source/main.cc `pkg-config --cflags --libs gtkmm-3.0` -Wl,-export-dynamic -g -Wall -Waddress -Wbool-compare -Wbool-operation; - g++ -Werror -Wall -Waddress -Wbool-compare -Wbool-operation -o source/ubl_settings_datetime source/main.o source/ubl_settings_datetime.o `pkg-config --cflags --libs gtkmm-3.0` -Wl,-export-dynamic -g; uninstall: @echo "Uninstall ..." @@ -78,7 +78,7 @@ uninstall: done @$(RM) "/usr/bin/${PKGNAME}" @$(RM) "/usr/share/applications/${PKGNAME}.desktop" - @$(RM) "/usr/share/polkit-1/actions/org.freedesktop.policykit.${PKGNAME}.pkexec.policy" + @$(RM) "/usr/share/polkit-1/actions/ru.ublinux.pkexec.${PKGNAME}.exec.policy" @$(RM) -rd "/usr/share/${PKGNAME}" @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ &>/dev/null @update-desktop-database --quiet 2>/dev/null @@ -103,12 +103,12 @@ install: check uninstall @install -Dm644 -t /usr/share/icons/hicolor/scalable/apps/ ${PKGNAME}.svg @install -Dm755 -t /usr/bin/ ${CMAKE_BUILD_DIR}/${PKGNAME} @install -Dm644 -t /usr/share/applications/ ${PKGNAME}.desktop - @install -Dm644 -t /usr/share/polkit-1/actions/ org.freedesktop.policykit.${PKGNAME}.pkexec.policy - @install -dm755 /usr/share/${PKGNAME}/{ui,images,reg} + @install -Dm644 -t /usr/share/polkit-1/actions/ ru.ublinux.pkexec.${PKGNAME}.exec.policy + @install -dm755 /usr/share/${PKGNAME}/{ui,images,css} @install -Dm644 -t /usr/share/${PKGNAME}/ui/ ${PKGNAME}.glade + @install -Dm644 -t /usr/share/${PKGNAME}/css/ style.css @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.svg @install -Dm644 -t /usr/share/${PKGNAME}/images/ ${PKGNAME}.png - @cp -afr reg/* /usr/share/${PKGNAME}/reg/ @gtk-update-icon-cache -fiq /usr/share/icons/hicolor/ @update-desktop-database --quiet 2>/dev/null @touch /usr/share/applications @@ -121,9 +121,6 @@ clean: echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \ else \ echo "Clean: OK"; \ - @$(RM) "${CMAKE_BUILD_DIR}/main.o" - @$(RM) "${CMAKE_BUILD_DIR}/${PKGNAME}.o" - @$(RM) "${CMAKE_BUILD_DIR}/${PKGNAME}" fi help: @@ -135,4 +132,4 @@ help: @echo "... compile" @echo "... install" @echo "... uninstall" - @echo "... clean" + @echo "... clean" \ No newline at end of file diff --git a/org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy b/ru.ublinux.pkexec.ubl-settings-datetime.exec.policy similarity index 100% rename from org.freedesktop.policykit.ubl-settings-datetime.pkexec.policy rename to ru.ublinux.pkexec.ubl-settings-datetime.exec.policy diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index e4f8297..319a9c3 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -9,11 +9,12 @@ link_directories(${GTK_LIBRARY_DIRS}) add_definitions(${GTK_CFLAGS_OTHER}) #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a") -#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -fdiagnostics-color=always") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always") set(SOURCE_FILES - ubl-settings-datetime.cpp) + main.cc + ubl-settings-datetime.cc + ubl-settings-datetime.h) set(LIBRARIES ${GTK_LIBRARIES} diff --git a/source/main.cc b/source/main.cc index e2b13b8..eb6b45a 100644 --- a/source/main.cc +++ b/source/main.cc @@ -19,7 +19,7 @@ #include #include #include -#include "ubl_settings_datetime.h" +#include "ubl-settings-datetime.h" int main(int argc, char* argv[]) { string str_argv=""; string str_cmd_argv = ""; diff --git a/source/ubl_settings_datetime.cc b/source/ubl-settings-datetime.cc similarity index 88% rename from source/ubl_settings_datetime.cc rename to source/ubl-settings-datetime.cc index 4d4bb45..fca8e89 100644 --- a/source/ubl_settings_datetime.cc +++ b/source/ubl-settings-datetime.cc @@ -23,19 +23,19 @@ #include #include #include -#include "ubl_settings_datetime.h" +#include "ubl-settings-datetime.h" using namespace std; -string path_app= "/home/superadmin/Документы/Проект/ubconfig_new/ubl-settings-datetime/source/"; -string path_glade= "/home/superadmin/Документы/Проект/ubconfig_new/ubl-settings-datetime/"; + +string path_app= "/usr/bin/"; +string path_glade= "/usr/share/ubl-settings-datetime/ui/"; string app_name = "ubl-settings-datetime"; string path_locale = "/usr/share/locale/"; -string path_css = "/home/superadmin/Документы/Проект/ubconfig_new/ubl-settings-datetime/style.css"; +string path_css = "/usr/share/ubl-settings-datetime/css/style.css"; bool flag_datetime = false; bool flag_timezone = false; bool flag_ntp = false; bool flag_update = false; - 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} { @@ -44,21 +44,21 @@ CmdArgParser::CmdArgParser(const std::string& p_name, const std::string& p_descr socketIDArg.set_short_name('s'); socketIDArg.set_flags(Glib::OptionEntry::FLAG_IN_MAIN); socketIDArg.set_description("Settings manager socket"); - - // Register it in the parser. It value will be recorded in m_socketID for later usage. add_entry(socketIDArg, m_socketID); } + ::Window CmdArgParser::GetSocketID() const { return m_socketID; } + MainWindow::MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder) : Gtk::ApplicationWindow(obj) , builder{builder} { - this->settings(); - + this->settings(); } + MainWindow::MainWindow(Glib::RefPtr const& builder) { this->builder = builder; this->settings(); @@ -72,7 +72,6 @@ void MainWindow::settings(){ _numTimeHrs->set_increments(1.0,1.0); _numTimeMin->set_increments(1.0,1.0); this->lacalization(); - //_txtDate->set_sensitive(false); this->get_config(); this->flag_block_gui(); this->event(); @@ -81,7 +80,6 @@ void MainWindow::settings(){ void MainWindow::lacalization(){ _cbDhcp->append(gettext("DHCP")); _cbDhcp->append(gettext("Manually")); - _lblDateTimeSetting->set_text(gettext("Setting the date and time")); _lblNtpServer1->set_text(gettext("Setting the date and time")); _lblTime->set_text(gettext("Time")); @@ -98,9 +96,8 @@ void MainWindow::lacalization(){ this->set_title(gettext("ubl-settings-datetime")); _txtDate->set_tooltip_text("Date of\nFormat: DD.MM.YYYY"); _mess_dchp->set_title("Warning!"); - - } + void MainWindow::flag_block_gui(){ if (flag_datetime==true){ _numTimeHrs->set_sensitive(false); @@ -125,6 +122,7 @@ void MainWindow::flag_block_gui(){ _btnUpdateDateTime->set_sensitive(false); } } + void MainWindow::add_CSS(){ Glib::RefPtr cssProvider = Gtk::CssProvider::create(); cssProvider->load_from_path(path_css); @@ -134,9 +132,8 @@ void MainWindow::add_CSS(){ Glib::RefPtr context = _boxColor->get_style_context(); context->add_class("cssboxColor1"); } -void MainWindow::get_builder(){ - +void MainWindow::get_builder(){ builder->get_widget("boxColor", _boxColor); builder->get_widget("btnUpdateDateTime", _btnUpdateDateTime); builder->get_widget("btnChooseDate", _btnChooseDate); @@ -169,7 +166,8 @@ void MainWindow::get_builder(){ builder->get_widget("lblSynchronizeBtn",_lblSynchronizeBtn); builder->get_widget("lblDateTimeSettingGlob",_lblDateTimeSettingGlob); this->add_CSS(); - } +} + void MainWindow::event(){ _btnMessClose->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::gui_mess_close)); _cldrDate->signal_day_selected().connect(sigc::mem_fun(*this, &MainWindow::get_calendar)); @@ -188,7 +186,6 @@ void MainWindow::event(){ void MainWindow::gui_mess_close(){ _mess_dchp->hide(); } - bool MainWindow::focus_ntp(GdkEventFocus* event){ if (event!=NULL){} @@ -205,9 +202,6 @@ bool MainWindow::focus_ntp(GdkEventFocus* event){ return true; } - - - void MainWindow::event_entry_cbDhcp(){ Glib::ustring str_dhcp = _cbDhcp->get_active_text(); if (str_dhcp.length()!=0){ @@ -234,7 +228,6 @@ void MainWindow::event_entry_cbDhcp(){ else{ string cmd = "/usr/bin/ubconfig set network NTPSERVERS=dhcp"; system(cmd.c_str()); - //_txtNtpServer->set_sensitive(false); _cbDhcp->set_active(0); } } @@ -243,7 +236,6 @@ void MainWindow::get_calendar(){ string str_month = ""; string str_day = ""; _cldrDate->get_date(year, month, day); - if (month <10){ str_month = "0"+to_string(month+1); } @@ -259,8 +251,7 @@ void MainWindow::get_calendar(){ string date = str_day + '.' + str_month + '.' + to_string(year); _txtDate->set_text(date); _popCalendar->hide(); - } - +} void MainWindow::calendar_show(){ if (year==0){ @@ -289,7 +280,6 @@ void MainWindow::enry_dhcp_mess(){ if (str_dhcp=="dhcp"){ _cbDhcp->set_active(0); _txtNtpServer->set_sensitive(false); - //_cbxSynchronizeNtp->set_sensitive(true); } else{ if (str_dhcp==""){ @@ -298,12 +288,9 @@ void MainWindow::enry_dhcp_mess(){ } else{ _cbDhcp->set_active(1); - //_txtNtpServer->set_sensitive(true); - //_cbxSynchronizeNtp->set_sensitive(false); _txtNtpServer->set_text(str_dhcp); } } - //_cbxDhcp->set_active(true); this->set_ntp_toggle(); } else{ @@ -312,11 +299,11 @@ void MainWindow::enry_dhcp_mess(){ _txtNtpServer->set_sensitive(0); } } + void MainWindow::get_config(){ this->read_file(); this->update_hour_minute(); this->update_calendar(); - //this->event_entry_cbDhcp(); this->enry_dhcp_mess(); string str_ntp = this->call("systemctl status ntpd.service systemd-timesyncd.service | grep \"Active: active\""); if (str_ntp.length()<50) { @@ -325,7 +312,6 @@ void MainWindow::get_config(){ else{ _cbxSynchronizeNtp->set_active(true); } - string read_reg_zon_cfg = this->call("/usr/bin/ubconfig get clock ZONE"); if ((read_reg_zon_cfg != "") && (read_reg_zon_cfg !="(null)")){ read_reg_zon_cfg = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("=")+1,read_reg_zon_cfg.length()); @@ -334,7 +320,6 @@ void MainWindow::get_config(){ string str_filling_zon = read_reg_zon_cfg.substr(read_reg_zon_cfg.find("/")+1,read_reg_zon_cfg.length()); str_filling_zon = str_filling_zon.substr(0,str_filling_zon.find("\n")); string str_zone_check = ""; - cout << str_filling_zon << endl; this->append_region_zone(str_filling_reg,str_filling_zon); } else { @@ -365,9 +350,7 @@ void MainWindow::parse_text_date(){ string day = data.substr(0,2); string month1 = data.substr(3,2); string year = data.substr(6,data.length()); - cout << day << " " << month1 << " " << year << endl; } - } void MainWindow::enter_zone_glob(){ @@ -388,7 +371,6 @@ void MainWindow::enter_zone_glob(){ void MainWindow::set_ntp_toggle(){ bool flag = _cbxSynchronizeNtp->get_active(); if (flag_datetime==true){ - } else { _numTimeHrs->set_sensitive(!flag); @@ -396,8 +378,6 @@ void MainWindow::set_ntp_toggle(){ _btnChooseDate->set_sensitive(!flag); _txtDate->set_sensitive(!flag); } - //_txtDate->set_sensitive(!flag); - //_btnUpdateDateTime->set_sensitive(!flag); string cmd = ""; if (flag==false){ cmd="systemctl --now disable systemd-timesyncd.service ntpd.service"; @@ -442,18 +422,14 @@ string MainWindow::call(string cmd){ char path[PATH_MAX]; fp = popen(cmd.c_str(), "r"); if (fp == NULL){ - cout << 3 << endl; exit(1); - } - + } while (fgets(path, PATH_MAX, fp) != NULL){ printf("%s", path); break; } - status = pclose(fp); if (status == -1) { - cout << 1 << endl; exit(1); } else { @@ -464,14 +440,12 @@ string MainWindow::call(string cmd){ void MainWindow::append_zone(){ Glib::ustring text = _cbRegion->get_active_text(); _cbZone->remove_all(); - if(!(text.empty())){ str_region = text; for (const auto &_str_zone : time_reg_map.at(str_region)){ _cbZone->append(_str_zone); } } - } void MainWindow::append_zone_glob(){ @@ -482,8 +456,9 @@ void MainWindow::append_zone_glob(){ for (const auto &_str_zone : time_reg_map.at(str_region_glob)){ _cbZoneGlob->append(_str_zone); } - } + } } + void MainWindow::update_time_date(){ this->enter_zone(); bool flag = _cbxSynchronizeNtp->get_active(); @@ -525,8 +500,7 @@ void MainWindow::update_time_date(){ str_month+str_day+"\""; string str_error_clock = this->call(cmd); size_t index = str_error_clock.find("date: "); - if (index==std::string::npos){ - + if (index==std::string::npos){ } } else{ @@ -547,6 +521,7 @@ void MainWindow::update_time_date(){ cmd = "hwclock --systohc"; system(cmd.c_str()); } + void MainWindow::update_hour_minute(){ time_t now = time(0); tm *ltm = localtime(&now); @@ -581,54 +556,40 @@ void MainWindow::update_calendar(){ void MainWindow::read_file(){ std::string line; - namespace fs = std::filesystem; for (const auto & entry : fs::directory_iterator("/usr/share/zoneinfo/")){ std::ifstream in(entry.path()); // окрываем файл для чтения - if (in.is_open()) - { - string key_reg = entry.path().filename().string(); - - string path_dir = "/usr/share/zoneinfo/"+key_reg; - if (fs::is_directory(path_dir)){ - vector zone; - zone.push_back(""); - for (const auto & entry_zone : fs::directory_iterator(path_dir)){ - std::ifstream in1(entry_zone.path()); // окрываем файл для чтения - if (in1.is_open()) - { - - string key_zone = entry_zone.path().filename().string(); - if (key_zone.length()!=0 || key_zone!=" "){ - zone.push_back(string(gettext(key_zone.c_str()))); - } + if (in.is_open()){ + string key_reg = entry.path().filename().string(); + string path_dir = "/usr/share/zoneinfo/"+key_reg; + if (fs::is_directory(path_dir)){ + vector zone; + zone.push_back(""); + for (const auto & entry_zone : fs::directory_iterator(path_dir)){ + std::ifstream in1(entry_zone.path()); // окрываем файл для чтения + if (in1.is_open()){ + string key_zone = entry_zone.path().filename().string(); + if (key_zone.length()!=0 || key_zone!=" "){ + zone.push_back(string(gettext(key_zone.c_str()))); } - in1.close(); } + in1.close(); + } - key_reg = string(gettext(key_reg.c_str())); - time_reg_map.insert({key_reg, zone}); - - - - while (getline(in, line)) - { - - } - - + key_reg = string(gettext(key_reg.c_str())); + time_reg_map.insert({key_reg, zone}); } } in.close(); } } + vector MainWindow::split(const std::string &s, char delim){ std::stringstream ss(s); std::string item; std::vector elems; while (std::getline(ss, item, delim)) { elems.push_back(item); - // elems.push_back(std::move(item)); // if C++11 (based on comment from @mchiasson) } return elems; } @@ -636,8 +597,6 @@ vector MainWindow::split(const std::string &s, char delim){ SettingsPlug::SettingsPlug(::Window p_socketID, Glib::RefPtr 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); diff --git a/source/ubl_settings_datetime.h b/source/ubl-settings-datetime.h similarity index 91% rename from source/ubl_settings_datetime.h rename to source/ubl-settings-datetime.h index ae73476..772f81a 100644 --- a/source/ubl_settings_datetime.h +++ b/source/ubl-settings-datetime.h @@ -23,7 +23,7 @@ #include #include using namespace std; -// g++ -Wall -Waddress -Wbool-compare -Wbool-operation -O2 -std=c++20 -lstdc++ -o main.cc `pkg-config --cflags --libs gtkmm-3.0` -Wl,-export-dynamic -g + extern string path_app; extern string path_glade; extern string app_name; @@ -34,29 +34,15 @@ extern bool flag_timezone; extern bool flag_ntp; extern bool flag_update; - - class CmdArgParser : public Glib::OptionGroup { - public: - CmdArgParser(const std::string& p_name, const std::string& p_description, const std::string& p_help); - - - // Override this to handle errors. I skipped it for simplicity. - // void on_error(Glib::OptionContext& context, const Glib::Error& error) override; - ::Window GetSocketID() const; - private: - int m_socketID = 0; - }; - - class MainWindow : public Gtk::ApplicationWindow { public: MainWindow(BaseObjectType* obj, Glib::RefPtr const& builder); @@ -98,7 +84,6 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::SpinButton *_numTimeMin; Gtk::CheckButton *_cbxSynchronizeNtp; Gtk::Box *_boxColor; - Gtk::Entry *_txtDate; Gtk::ComboBoxText *_cbRegion; Gtk::ComboBoxText *_cbRegionGlob; @@ -109,7 +94,6 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Popover *_popCalendar; Gtk::Calendar *_cldrDate; Gtk::Label *_lblMessage; - Gtk::Label *_lblDateTimeSetting; Gtk::Label *_lblNtpServer1; Gtk::Label *_lblTime; @@ -123,10 +107,10 @@ class MainWindow : public Gtk::ApplicationWindow { Gtk::Label *_lblSynchronizebChk; Gtk::Label *_lblSynchronizeBtn; Gtk::Label *_lblDateTimeSettingGlob; - - - - unsigned int year=0, month=0, day=0; + std::map > time_reg_map; + unsigned int year=0; + unsigned int month=0; + unsigned int day=0; int hour; int minute; string str_region=""; @@ -135,21 +119,17 @@ class MainWindow : public Gtk::ApplicationWindow { string str_txtNtpServer; string str_zone=""; string str_zoneGlob; - std::map > time_reg_map; - + }; class SettingsPlug : public Gtk::Plug { - public: Gtk::Window *window; SettingsPlug(::Window p_socketID, Glib::RefPtr builder); private: - Gtk::Widget *plugBox; Gtk::Widget *parent; }; - void help(); #endif diff --git a/ubl-settings-datetime.glade b/ubl-settings-datetime.glade index 35e262e..6bc0f3c 100644 --- a/ubl-settings-datetime.glade +++ b/ubl-settings-datetime.glade @@ -5,7 +5,6 @@ False Внимание! - usr/share/icons/hicolor/scalable/apps/ubl-settings-datetime.png True @@ -83,7 +82,6 @@ False Настройки даты и времени - usr/share/icons/hicolor/scalable/apps/ubl-settings-datetime.png True @@ -104,7 +102,8 @@ 5 6 6 - usr/share/icons/hicolor/scalable/apps/ubl-settings-datetime.png + 69 + ubl-settings-datetime False