Wiki link fix #68

Merged
asmeron merged 3 commits from YanTheKaller/ublexec:master into master 4 weeks ago

@ -7,7 +7,4 @@
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ublexec.css</file> <file>ublexec.css</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/images">
<file>ublexec-banner.png</file>
</gresource>
</gresources> </gresources>

@ -24,10 +24,6 @@ if(WEBKIT_LIBRARIES_FOUND)
add_definitions(${WEBKIT_CFLAGS_OTHER}) add_definitions(${WEBKIT_CFLAGS_OTHER})
endif() endif()
configure_file(ubl-cmake.in ubl-cmake.h)
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h DESTINATION ./)
set(GRESOURCE_C resources.c) set(GRESOURCE_C resources.c)
set(GRESOURCE_XML gresource.xml) set(GRESOURCE_XML gresource.xml)
@ -38,7 +34,6 @@ set(DEPENDFILES
../ublexec.glade ../ublexec.glade
../ublexec-application.glade ../ublexec-application.glade
../gresource.xml ../gresource.xml
../ublexec-banner.png
../ublexec.css ../ublexec.css
) )
@ -62,28 +57,34 @@ add_custom_target(
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}
) )
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a") add_definitions(-DVTE_INCLUDE)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -lm")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \
-O2 -pipe -fno-plt -fexceptions \ -O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \ -Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection") -fstack-clash-protection -fcf-protection")
string(FIND "${CMAKE_CXX_FLAGS}" "-D_FORTIFY_SOURCE" FORTIFY_FOUND)
if(FORTIFY_FOUND EQUAL -1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wp,-D_FORTIFY_SOURCE=2")
endif()
set(SOURCE_FILES set(SOURCE_FILES
ublexec.c ublexec.c
ublexec.h ublexec.h
ubl-strings.h ubl-strings.h
ubl-utils.h
ubl-utils.c
${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h
) )
set(LIBRARIES set(LIBRARIES
${GTK_LIBRARIES} ${GTK_LIBRARIES}
${WEBKIT_LIBRARIES} ${WEBKIT_LIBRARIES}
${UTILS_LIBRARIES}
${VTE291_LIBRARIES} ${VTE291_LIBRARIES}
pthread) pthread
ublsettings
ublsettings-gtk3
ublsettingsui-gtk3)
add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})

@ -1,2 +0,0 @@
#cmakedefine WEBKIT_FOUND

@ -1,6 +1,3 @@
#define VERSION_LABEL yon_char_unite(_("Version:")," ",version_application,"\n",NULL)
#define HELP_LABEL yon_char_unite(_("ublexec version:")," ", version_application,"\n",_("Run as..."),"\n",_("Usage:"), " ublexec ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n",NULL)
#define TITLE_LABEL _("Run as...") #define TITLE_LABEL _("Run as...")
#define TITLE_INFO_LABEL _("Run the application as a user with a changed priority") #define TITLE_INFO_LABEL _("Run the application as a user with a changed priority")
@ -12,12 +9,6 @@
#define CANCEL_LABEL _("Cancel") #define CANCEL_LABEL _("Cancel")
#define OPEN_LABEL _("Open") #define OPEN_LABEL _("Open")
#define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?")
#define HELP_INFO_LABEL _("You will be redirected to documentation website, where documentation is\ntranslated and supported by community.")
#define HELP_ALWAYS_OPEN_LABEL _("Always redirect to online documentation")
#define OPEN_HELP_LABEL _("Open documentation")
#define PROJECT_HOME_LABEL _("Project homepage")
#define GRAPHICS_LABEL _("Graphics") #define GRAPHICS_LABEL _("Graphics")
#define TOOLS_LABEL _("Tools") #define TOOLS_LABEL _("Tools")
#define INTERNET_LABEL _("Internet") #define INTERNET_LABEL _("Internet")

File diff suppressed because it is too large Load Diff

@ -1,383 +0,0 @@
#ifndef UBL_UTILS
#define UBL_UTILS
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <pthread.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <pwd.h>
#include <locale.h>
#include <libintl.h>
#include <gtk/gtk.h>
#include <gtk/gtkx.h>
#include <pwd.h>
#include <vte/vte.h>
#include "ubl-cmake.h"
#ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h>
#endif
#define _(String) gettext(String)
#define DesktopPath "/usr/share/applications/"
#define try bool __HadError=false;
#define catch(x) ExitJmp:if(__HadError)
#define throw(x) {__HadError=true;goto ExitJmp;}
static char** array_size_pow;
#define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next)
#define new(type) malloc(sizeof(type))
#define new_arr(type,size) malloc(sizeof(type)*size)
#define get_home_dir_command yon_char_unite("getent passwd \"",yon_ubl_root_user_get(),"\" | cut -d: -f6",NULL)
#define get_processes_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.service\""
#define get_slices_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.slice\""
typedef enum
{
#ifdef __GTK_H__
DICTIONARY_GTK_WIDGETS_TYPE,
#endif
DICTIONARY_OTHER_TYPE=0,
DICTIONARY_CHAR_TYPE,
DICTIONARY_INT_TYPE,
DICTIONARY_BOOL_TYPE,
} DICT_TYPE;
typedef struct dictionary
{
char *key;
void *data;
struct dictionary *next;
struct dictionary *prev;
struct dictionary *first;
DICT_TYPE data_type;
int flag1;
} dictionary;
typedef struct apps
{
char *filename;
char *Name;
int Type;
char *Categories;
char *Exec;
char *Icon;
int Pluggable;
int DualPluggable;
int Hidden;
} apps;
typedef char** config_str;
static dictionary *__yon__config__strings = NULL;
#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE)
#define config(key) yon_config_get_by_key(key)
#define for_config dictionary temp = NULL; for_dictionary(temp,__yon__config__strings)
#define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size)
// dictionary functions
/**yon_dictionary_get_data(dictionary, type)
* [EN]
* Gets data from dictionary.
* [dictionary] is dictionary, from which data should be extracted;
* [type] is type of data, [dictionary] contains.
* [RU]
* Возвращает данные из словаря.
* [dictionary] - словарь из которого достаются данные.
* [type] - тип данных, хранящихся в словаре [dictionary].
*/
#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data)
/**yon_dictionary_add_or_create_if_exists_with_data(dict,key,data)
* [EN]
*
* [RU]
* Добавляет элемент словаря в конец словаря [dict] c ключом [key] и данными [data].
* Если словарь не существует, создаёт его
*/
#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_new_with_data(key,data); \
else dict=yon_dictionary_append_with_data(dict,key,data);}
dictionary *yon_dictionary_new();
dictionary *yon_dictionary_append(dictionary *targetdict);
dictionary *yon_dictionary_get_last(dictionary *dict);
dictionary *yon_dictionary_swap(dictionary *dict, int aim);
void yon_dictionary_make_first(dictionary *dict);
void yon_dictionary_make_nth(dictionary *dict, int nth);
dictionary *yon_dictionary_new_with_data(char *key, void *data);
dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data);
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect);
dictionary *yon_dictionary_get(dictionary **dict, char *key);
dictionary *yon_dictionary_rip(dictionary *dict);
dictionary *yon_dictionary_get_nth(dictionary *dict, int place);
void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*));
// char functions
int yon_char_find_last(char *source, char find);
char *yon_char_append(char *source, char *append);
char *yon_char_new(char *chr);
char *yon_char_unite(char *source, ...);
char *yon_cut(char *source, int size, int startpos);
char *yon_char_divide(char *source, int dividepos);
char *yon_char_divide_search(char *source, char *dividepos, int delete_divider);
char *yon_char_from_int(int int_to_convert);
char *yon_char_from_long(long int_to_convert);
char *yon_char_replace(char *source, char *find, char*replace);
char **yon_char_parse(char *parameters, int *size, char *divider);
char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete);
int yon_char_parsed_check_exist(char **parameters, int size, char *param);
int yon_char_find_count(char *source, char *find);
int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size);
config_str yon_char_parsed_new (int *size, ...);
void yon_char_parsed_copy(config_str *source, config_str *to_copy);
config_str yon_char_parsed_append(config_str parsed, int *size, char *string);
int yon_char_parsed_remove_newline_symbols(config_str parsed, int *size);
int yon_ubl_check_root();
char *yon_ubl_root_user_get();
char *yon_ubl_user_get_home_directory();
config_str yon_ubl_get_all_users(int *user_size);
config_str yon_ubl_get_all_processes(int *processes_size);
config_str yon_ubl_get_all_slices(int *slices_size);
// parsing functions
config_str philos_list_user(int* size);
dictionary *yon_scan_desktops();
apps *yon_apps_scan_and_parse_desktops(int *sizef);
void yon_apps_sort(apps *applist, int size);
apps *yon_apps_get_by_name(apps *applist, char *name, int size);
char *yon_app_chooser_open_with_sections(char *section_name, char *section_filter, char *section_icon, ...);
config_str yon_config_load(char *command, int *str_len);
int yon_config_save_registered(char *path, char *section);
char *yon_config_get_parameter(config_str parameters, int size, char *param);
int yon_config_load_register(char *command);
int yon_config_remove_by_key(char *key);
int yon_config_remove_by_data(void *data);
int yon_config_remove_element(char *key, char *deleted);
void *yon_config_get_by_key(char *key);
char *yon_config_get_key_by_data(char *data);
int yon_config_set(char *key, void *data);
int yon_config_clean();
void yon_config_register(char *key, void *data);
config_str yon_config_get_all();
// terminal-using functions
int yon_launch_app_with_arguments(char *name, char *args);
void yon_launch(char *command);
void yon_launch_thread(char *command);
// Gtk functions
#ifdef __GTK_H__
#ifdef VTE_TERMINAL
void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument);
void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument);
#endif
enum YON_TYPE{
YON_TYPE_STRING,
YON_TYPE_STRING_LIST,
YON_TYPE_INT,
YON_TYPE_DOUBLE,
YON_TYPE_BOOLEAN,
YON_TYPE_OTHER
};
GtkWidget *yon_ubl_menu_item_about_new(char *buttonname);
GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname);
/**yon_gtk_builder_get_widget(builder, widget_name)
* [EN]
* Returns GtkWidget from GtkBuilder *[builder].
* [builder] is GtkBuilder*;
* [widget_name] is id of widget;
*/
#define yon_gtk_builder_get_widget(builder, widget_name) GTK_WIDGET(gtk_builder_get_object(builder, widget_name))
typedef struct
{
GtkWidget *Icon;
GtkWidget *Label;
GtkWidget *IconView;
GtkListStore *List;
} expander_icon_view;
void yon_window_config_setup(GtkWindow *window);
int yon_window_config_load(char *path);
config_str yon_window_config_get_section(char *section, gsize *size);
void yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type);
void yon_window_config_add_custom_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type);
void yon_window_config_erase_custom_parameter(char *param_name, char *section);
int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type);
int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size);
int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find);
void yon_gtk_column_minimal_fixed_size_set(GtkTreeViewColumn *column);
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
void yon_subwindow_close(GtkWidget *self);
int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target);
typedef enum
{
BACKGROUND_IMAGE_SUCCESS_TYPE,
BACKGROUND_IMAGE_FAIL_TYPE
} BACKGROUND_IMAGE_TYPE;
typedef struct {
BACKGROUND_IMAGE_TYPE type;
GtkWidget *icon;
GtkWidget *box;
GtkWidget *label;
char* text_to_render;
} render_data;
/**yon_ubl_status_box_setup(render,icon,box,label)
* [EN]
* Sets up [render] structure of type render_data.
* [icon] is GtkImage widget of status box for showing status icons;
* [box] is GtkBox widget of status box for showing status color;
* [label] is GtkLabel widget of status box for showing status text;
* [RU]
* Настраивает структуру [render] типа render_data.
* [icon] - виджет типа GtkIcon в котором будут отображаться статусные иконки;
* [box] - виджет типа GtkBox в котором будет отображаться цвет статуса;
* [label] - виджет типа GtkLabel в котором будет отображаться текст статусного сообщения;
*/
int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label);
/**yon_ubl_status_box_render(render,text,type)
* [EN]
* Renders message in status box;
* [render] is render_data structure of status box;
* [text] is text to be shown in status box;
* [type] if type of message. Can be BACKGROUND_IMAGE_FAIL_TYPE or BACKGROUND_IMAGE_SUCCESS_TYPE
* [RU]
* Отображает сообщение в статусном окне.
* [render] - структура типа render_data для нужного статусного окна;
* [text] - текст, отображаемый в статусном окне;
* [type] - тип сообщения. Может быть:
* BACKGROUND_IMAGE_FAIL_TYPE (красный фон,иконка - восклицательный знак)
* или
* BACKGROUND_IMAGE_SUCCESS_TYPE (Жёлтный фон, иконка - галка)
*/
void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type);
/**yon_ubl_header_setup(overlay, head, image, imag_path)
* [EN]
* Sets up header of app.
* [overlay] is overlay for app header;
* [head] is box of header, which connects to [overlay]
* [image] is header background image;
* [imag_path] is path of image, shown in [image]
* [RU]
* Настраивает заголовок приложения.
* [overlay] - оверлей заголовка приложения;
* [head] - шапка заголовка, присоединяемая к [overlay]
* [image] - виджет картинки для заднего фона;
* [imag_path] - путь до картинки, загружаемой в [image]
*/
#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path)
#define yon_ubl_header_setup_resource(overlay, head, image, imag_path) _yon_ubl_header_setup_resource(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path)
#endif
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id);
#ifdef WEBKIT_FOUND
void yon_ubl_browser_window_open(char *link, char *browser_window_name);
#else
void yon_ubl_browser_window_open(char *link, char *browser_window_name);
#endif
#endif

@ -2,98 +2,9 @@
config main_config; config main_config;
//signal emmit handlers - no header initialization
/**on_close_subwindow(GtkWidget *self)
* [EN]
* Closes window in which [self] is contained.
* [RU]
* Закрывает окно, в котором расположен виджет [self].
*/
void on_close_subwindow(GtkWidget *self){
gtk_widget_destroy(gtk_widget_get_toplevel(self));
}
/**yon_open_browser(GtkWidget *self, char *link)
* [EN]
* Opens browser with [link] link.
* [RU]
* Открывает браузер с [link] ссылкой.
*/
void yon_open_browser(GtkWidget *self, char *link){
yon_ubl_browser_window_open(link,TITLE_LABEL);
}
/**on_open_documentation_confirmation(GtkWidget *self, char *link)
* [EN]
* Opens confirmation window for [link] link.
* [RU]
* Открывает окно подтверждение перехода по ссылке [link].
*/
void on_open_documentation_confirmation(GtkWidget *self, char *link){
if (main_config.always_open_documentation==0){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window));
widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow");
widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton");
widgets->CloseButton = yon_gtk_builder_get_widget(builder,"CancelHelpButton");
widgets->AlwaysOpenCheck = yon_gtk_builder_get_widget(builder,"AlwaysOpenDocumentationCheckbox");
gtk_widget_show_all(widgets->Window);
g_signal_connect(G_OBJECT(widgets->CloseButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(yon_open_browser),yon_char_new(link));
g_signal_connect(G_OBJECT(widgets->AcceptButton),"clicked",G_CALLBACK(on_close_subwindow),NULL);
} else {
yon_open_browser(self,link);
}
}
/**on_link(GtkWidget *self, char* uri, gpointer user_data)
* [EN]
* Signal for hadnling AboutDialog links.
* Connect to "activate-link" signal.
* [self] is AboutDialog window;
* [uri] is activated link;
* [user_data] is pointer for user data, hasn't used in standard handler;
* [RU]
* Функция для обработки сигнала нажатия на ссылку окна AboutDialog.
* Присоединять к сигналу "activate-link".
* [self] - окно AboutDialog;
* [uri] - ссылка, по которой совершается переход;
* [user_data] - указатель на любые другие данные, не используется в стандартном обработчике;
*/
void on_link(GtkWidget *self, char* uri, gpointer user_data){
gtk_widget_destroy(self);
on_open_documentation_confirmation(self,uri);
}
/**on_about()
* [EN]
* Function for setting up and showing AboutDialog.
* Connect it to "activate" signal of Documentation MenuItem.
* [RU]
* Функиця для настройки и показа окна AboutDialog.
* Присоединять к сигналу "activate" кнопки справки типа MenuItem.
*/
void on_about(){
GtkBuilder *builder=gtk_builder_new_from_resource(glade_path);
GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow");
GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic");
GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide");
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application);
gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL);
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL);
g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL);
gtk_widget_set_visible(hideButtonBox,0);
gtk_widget_destroy(hideButtonBox);
gtk_widget_show(window);
}
//functions //functions
void on_file_chooser_open(GtkWidget *self, main_window *widgets){ void on_file_chooser_open(GtkWidget *, main_window *widgets){
GtkWidget *dialog = gtk_file_chooser_dialog_new(TITLE_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); GtkWidget *dialog = gtk_file_chooser_dialog_new(TITLE_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_OPEN,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),"/usr/bin/"); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),"/usr/bin/");
gtk_window_set_icon_name(GTK_WINDOW(dialog),icon_path); gtk_window_set_icon_name(GTK_WINDOW(dialog),icon_path);
@ -103,22 +14,25 @@ void on_file_chooser_open(GtkWidget *self, main_window *widgets){
char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
gtk_entry_set_text(GTK_ENTRY(widgets->TargetNameEntry),filename); gtk_entry_set_text(GTK_ENTRY(widgets->TargetNameEntry),filename);
} }
on_close_subwindow(dialog); on_subwindow_close(dialog);
} }
void on_application_chooser_open(GtkWidget *self, main_window *widgets){ void on_application_chooser_open(GtkWidget *, main_window *widgets){
char *app = yon_app_chooser_open_with_sections(GRAPHICS_LABEL,"Graphics","", yon_app_chooser_window *window = yon_app_chooser_window_new(0,GRAPHICS_LABEL,"Graphics",
TOOLS_LABEL,"Utility","", TOOLS_LABEL,"Utility",
INTERNET_LABEL,"Network","", INTERNET_LABEL,"Network",
MULTIMEDIA_LABEL,"AudioVideo","", MULTIMEDIA_LABEL,"AudioVideo",
SETTINGS_LABEL,"Settings","", SETTINGS_LABEL,"Settings",
EDUCATION_LABEL,"Education","", EDUCATION_LABEL,"Education",
OFFICE_LABEL,"Office","", OFFICE_LABEL,"Office",
DEVELOPMENT_LABEL,"Development","", DEVELOPMENT_LABEL,"Development",
SYSTEM_LABEL,"System","",NULL); SYSTEM_LABEL,"System",NULL);
if (app){ int size;
gtk_entry_set_text(GTK_ENTRY(widgets->TargetNameEntry),app); config_str apps_list = yon_app_chooser_window_run(window,&size);
if (size){
apps *cur_app = yon_apps_get(apps_list[0]);
gtk_entry_set_text(GTK_ENTRY(widgets->TargetNameEntry),cur_app->Desktop_path);
} }
} }
@ -167,7 +81,7 @@ void on_user_switching(GtkToggleButton *self, main_window *widgets){
if (gtk_adjustment_get_value(adj)<gtk_adjustment_get_lower(adj)) gtk_adjustment_set_value(adj,gtk_adjustment_get_lower(adj)); if (gtk_adjustment_get_value(adj)<gtk_adjustment_get_lower(adj)) gtk_adjustment_set_value(adj,gtk_adjustment_get_lower(adj));
} }
void on_setup_command(GtkWidget *self, main_window *widgets){ void on_setup_command(GtkWidget *, main_window *widgets){
char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->TargetNameEntry)); char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->TargetNameEntry));
if (target&&strcmp(target,"")){ if (target&&strcmp(target,"")){
char *final_command; char *final_command;
@ -191,7 +105,7 @@ void on_setup_command(GtkWidget *self, main_window *widgets){
priority_check ? priority : "", priority_check ? priority : "",
yon_char_append(" ",target), yon_char_append(" ",target),
NULL); NULL);
config_str gotten_command = yon_config_load(command,&size); config_str gotten_command = yon_config_load(yon_debug_output("%s\n",command),&size);
final_command = yon_char_divide_search(*gotten_command,"\n",-1); final_command = yon_char_divide_search(*gotten_command,"\n",-1);
gtk_entry_set_text(GTK_ENTRY(widgets->commandEntry),final_command); gtk_entry_set_text(GTK_ENTRY(widgets->commandEntry),final_command);
free(final_command); free(final_command);
@ -201,15 +115,14 @@ void on_setup_command(GtkWidget *self, main_window *widgets){
} }
} }
void on_command_run(GtkWidget *self, main_window *widgets){ void on_command_run(GtkWidget *, main_window *widgets){
if (strcmp(gtk_entry_get_text(GTK_ENTRY(widgets->commandEntry)),"")){ if (strcmp(gtk_entry_get_text(GTK_ENTRY(widgets->commandEntry)),"")){
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->commandCheck))){ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->commandCheck))){
const char *command = gtk_entry_get_text(GTK_ENTRY(widgets->commandEntry)); const char *command = gtk_entry_get_text(GTK_ENTRY(widgets->commandEntry));
yon_launch_thread((char*)command); yon_launch_app_with_arguments((char*)command,NULL);
} else { } else {
char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->TargetNameEntry)); char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->TargetNameEntry));
if (target&&strcmp(target,"")){ if (target&&strcmp(target,"")){
char *final_command;
int terminal_check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->runWithTerminalCheck)); int terminal_check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->runWithTerminalCheck));
int chosen_terminal = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->runWithTerminalCombo)); int chosen_terminal = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->runWithTerminalCombo));
terminal_info *terminal = yon_dictionary_get_data(yon_dictionary_get_nth(main_config.terminals,chosen_terminal),terminal_info*); terminal_info *terminal = yon_dictionary_get_data(yon_dictionary_get_nth(main_config.terminals,chosen_terminal),terminal_info*);
@ -220,7 +133,6 @@ void on_command_run(GtkWidget *self, main_window *widgets){
int sudo_check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->runWithUserSudoCheck)); int sudo_check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->runWithUserSudoCheck));
int priority_check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->priorityCheck)); int priority_check = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->priorityCheck));
char *priority = priority_check ? yon_char_append(" --priority=",yon_char_from_long(gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale))))) : ""; char *priority = priority_check ? yon_char_append(" --priority=",yon_char_from_long(gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale))))) : "";
int size;
char *command = yon_char_unite(get_run_command_command, char *command = yon_char_unite(get_run_command_command,
terminal_check ? yon_char_append(" --terminal=", terminal->name_simple) : "", terminal_check ? yon_char_append(" --terminal=", terminal->name_simple) : "",
user_check ? yon_char_append(" --user=", user) : "", user_check ? yon_char_append(" --user=", user) : "",
@ -239,51 +151,33 @@ void on_command_run(GtkWidget *self, main_window *widgets){
// standard functions // standard functions
void config_init(){ void config_init(){
main_config.always_open_documentation=0;
main_config.win_height=0;
main_config.win_width=0;
main_config.win_pos_x=0;
main_config.win_pos_y=0;
main_config.socket_id=-1;
main_config.save_socket_id=-1;
main_config.load_socket_id=-1;
main_config.lock_help=0;
main_config.lock_help=0;
main_config.lock_load_global=0;
main_config.lock_save_global=0;
main_config.lock_save_local=0;
} }
void on_adjustment_changed(GtkAdjustment *self, main_window *widgets){ void on_adjustment_changed(GtkAdjustment *self, main_window *widgets){
gtk_entry_set_text(GTK_ENTRY(widgets->prioritySpinEntry),yon_char_from_long(gtk_adjustment_get_value(self))); gtk_entry_set_text(GTK_ENTRY(widgets->prioritySpinEntry),yon_char_from_long(gtk_adjustment_get_value(self)));
} }
void on_adjustment_increase(GtkWidget *self, main_window *widgets) { void on_adjustment_increase(GtkWidget *, main_window *widgets) {
long current = gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale))); long current = gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale)));
current ++; current ++;
gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale)),current); gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale)),current);
} }
void on_adjustment_decrease(GtkWidget *self, main_window *widgets) { void on_adjustment_decrease(GtkWidget *, main_window *widgets) {
long current = gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale))); long current = gtk_adjustment_get_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale)));
current --; current --;
gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale)),current); gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(widgets->priorityScale)),current);
} }
main_window *setup_window(){ main_window *yon_main_window_complete(main_window *widgets){
/* Widgets getting | Получение виджетов */ widgets = yon_remalloc(widgets,sizeof(main_window));
main_window *widgets = malloc(sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
widgets->Window = yon_gtk_builder_get_widget(builder,"window"); gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0);
widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox"); widgets->PlugBox = yon_gtk_builder_get_widget(builder,"plugBox");
widgets->TargetNameEntry = yon_gtk_builder_get_widget(builder,"targetNameEntry"); widgets->TargetNameEntry = yon_gtk_builder_get_widget(builder,"targetNameEntry");
widgets->chooseFileButton = yon_gtk_builder_get_widget(builder,"chooseFileButton"); widgets->chooseFileButton = yon_gtk_builder_get_widget(builder,"chooseFileButton");
widgets->chooseDesktopButton = yon_gtk_builder_get_widget(builder,"chooseDesktopButton"); widgets->chooseDesktopButton = yon_gtk_builder_get_widget(builder,"chooseDesktopButton");
widgets->StatusBox = yon_gtk_builder_get_widget(builder,"mainStatusBox");
widgets->StatusIcon = yon_gtk_builder_get_widget(builder,"mainStatusIcon");
widgets->StatusLabel = yon_gtk_builder_get_widget(builder,"mainStatusLabel");
widgets->runWithTerminalCheck = yon_gtk_builder_get_widget(builder,"runWithTerminalCheck"); widgets->runWithTerminalCheck = yon_gtk_builder_get_widget(builder,"runWithTerminalCheck");
widgets->runWithTerminalCombo = yon_gtk_builder_get_widget(builder,"runWithTerminalCombo"); widgets->runWithTerminalCombo = yon_gtk_builder_get_widget(builder,"runWithTerminalCombo");
@ -305,26 +199,12 @@ main_window *setup_window(){
widgets->runButton = yon_gtk_builder_get_widget(builder,"runButton"); widgets->runButton = yon_gtk_builder_get_widget(builder,"runButton");
widgets->HeadOverlay = yon_gtk_builder_get_widget(builder,"overHead");
widgets->HeadImage = yon_gtk_builder_get_widget(builder,"imgHeadBackground");
widgets->HeadBox = yon_gtk_builder_get_widget(builder,"boxColor");
widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL);
widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL);
gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL); gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL);
GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem);
gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem);
/* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING); // yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING);
/* Signal connection | Присоединение сигналов */ /* Signal connection | Присоединение сигналов */
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL);
g_signal_connect(G_OBJECT(widgets->chooseFileButton),"clicked",G_CALLBACK(on_file_chooser_open),widgets); g_signal_connect(G_OBJECT(widgets->chooseFileButton),"clicked",G_CALLBACK(on_file_chooser_open),widgets);
g_signal_connect(G_OBJECT(widgets->chooseDesktopButton),"clicked",G_CALLBACK(on_application_chooser_open),widgets); g_signal_connect(G_OBJECT(widgets->chooseDesktopButton),"clicked",G_CALLBACK(on_application_chooser_open),widgets);
@ -394,93 +274,34 @@ main_window *setup_window(){
return widgets; return widgets;
} }
gboolean yon_interface_update(main_window *){
return G_SOURCE_REMOVE;
}
// standard functions
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
local=setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
textdomain (LocaleName); textdomain (LocaleName);
config_init();
int option_index=0;
int show_help=0;
int debug_mode=0;
{
struct option long_options[] = {
{"help", 0, 0, 'h'},
{"version", 0, 0, 'V'},
{"lock-help", 0,0, 1},
{"lock-save", 0,0, 2},
{"lock-save-local", 0,0, 3},
{"lock-save-global", 0,0, 4},
{"lock-load-global", 0,0, 5},
{"socket-id", 1, 0, 's'},
{"socket-ext-id", 1,0, 'e'},
{"socket-trd-id", 1,0, 't'},
{"debug", 0,0, 'd'},
{ NULL, 0, NULL, 0 }
};
for (int i=0;i<argc;i++){
int argument=getopt_long(argc,argv,"hVvs:e:t:d",long_options,&option_index);
switch(argument){
case 'h':
show_help=1;
break;
case 'v':
case 'V':
printf("%s\n",VERSION_LABEL);
exit(0);
break;
case 's':
if(optarg)
main_config.socket_id=atoi(optarg);
break;
case 'e':
if(optarg)
main_config.save_socket_id=atoi(optarg);
break;
case 't':
if(optarg)
main_config.load_socket_id=atoi(optarg);
break;
case 1:
main_config.lock_help=1;
break;
case 2:
main_config.lock_save_local=1;
main_config.lock_save_global=1;
break;
case 3:
main_config.lock_save_local=1;
break;
case 4:
main_config.lock_save_global=1;
break;
case 5:
main_config.lock_load_global=1;
break;
}
}
if (show_help==1&&main_config.lock_help!=1){
printf("%s\n",HELP_LABEL);
exit(0);
}
}
if (getuid()!=0){ yon_ubl_connect_config((_template_config*)&main_config);
main_config.lock_load_global=1; yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
main_config.lock_save_global=1; config_str unfound = NULL;
main_config.lock_save_local=1; yon_apps_init();
} int size=0;
yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL);
gtk_init(&argc,&argv); gtk_init(&argc,&argv);
template_main_window *widgets = yon_ubl_window_setup();
//turn off if custom presented
main_window *widgets = setup_window(); yon_main_window_complete((main_window*)widgets);
yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel);
yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path);
yon_ubl_status_box_render(CHOOSE_APP_OR_FILE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(CHOOSE_APP_OR_FILE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
yon_window_config_setup(GTK_WINDOW(widgets->Window)); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_load(config_path); yon_window_config_load(path);
GtkCssProvider *css=gtk_css_provider_new(); main_config.launch_arguments=yon_char_parsed_copy(argv,argc);
gtk_css_provider_load_from_resource(css,CssPath); main_config.launch_size=argc;
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(css),
-1);
gtk_main(); gtk_main();
yon_apps_uninit();
return 0;
} }

@ -1,20 +1,21 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gtk/gtkx.h> #include <gtk/gtkx.h>
#include <gtk/gtkspinbutton.h> #include <gtk/gtkspinbutton.h>
#include "ubl-utils.h"
#include <locale.h> #include <locale.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <libintl.h> #include <libintl.h>
#include <getopt.h> #include <getopt.h>
#include "../compile/ubl-cmake.h" #include <libublsettings.h>
#include <libublsettings-gtk3.h>
#include <libublsettingsui-gtk3.h>
#ifdef WEBKIT_FOUND #ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h> #include <webkit2/webkit2.h>
#endif #endif
#include "ubl-strings.h" #include "ubl-strings.h"
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ublexec" #define WIKI_LINK "https://wiki.ublinux.ru/software/programs_and_utilities/all/ublexec"
#define _(String) gettext(String) #define _(String) gettext(String)
@ -38,20 +39,11 @@ string version_application;
char *local; char *local;
typedef struct { typedef struct {
int always_open_documentation; template_config_fields;
int win_pos_x;
int win_pos_y;
int win_width;
int win_height;
int socket_id; int save_config;
int load_socket_id; config_str launch_arguments;
int save_socket_id; int launch_size;
int lock_help;
int lock_save_local;
int lock_save_global;
int lock_load_global;
int user_id_min; int user_id_min;
int user_id_max; int user_id_max;
@ -66,23 +58,9 @@ typedef struct {
typedef struct { typedef struct {
//Standard //Standard
GtkWidget *Window; template_window_fields;
GtkWidget *HatLabel;
GtkWidget *PlugBox;
GtkWidget *HeadOverlay;
GtkWidget *HeadImage;
GtkWidget *HeadBox;
GtkWidget *HeadTitleLabel;
GtkWidget *HeadInfoLabel;
GtkWidget *StatusBox;
GtkWidget *StatusIcon;
GtkWidget *StatusLabel;
GtkWidget *TargetNameEntry; GtkWidget *TargetNameEntry;
GtkWidget *AboutMenuItem;
GtkWidget *DocumentationMenuItem;
GtkWidget *targetNameEntry; GtkWidget *targetNameEntry;
GtkWidget *chooseFileButton; GtkWidget *chooseFileButton;
@ -125,3 +103,19 @@ typedef struct {
main_window *setup_window(); main_window *setup_window();
void on_save_done(main_window *, config_str output, int size);
void on_file_chooser_open(GtkWidget *self, main_window *widgets);
void on_application_chooser_open(GtkWidget *self, main_window *widgets);
void on_user_changed(GtkWidget *self, main_window *widgets);
void on_su_sudo_activate(GtkWidget *self, main_window *widgets);
void on_user_activate(GtkToggleButton *self, main_window *widgets);
void on_user_switching(GtkToggleButton *self, main_window *widgets);
void on_setup_command(GtkWidget *self, main_window *widgets);
void on_command_run(GtkWidget *self, main_window *widgets);
void config_init();
void on_adjustment_changed(GtkAdjustment *self, main_window *widgets);
void on_adjustment_increase(GtkWidget *self, main_window *widgets);
void on_adjustment_decrease(GtkWidget *self, main_window *widgets);
main_window *yon_main_window_complete(main_window *widgets);
gboolean yon_interface_update(main_window *);
int main(int argc, char *argv[]);

@ -1,147 +1,133 @@
.textHead{
text-shadow: 2px 2px @theme_bg_color;
color: @theme_text_color;
}
.thin { .thin {
margin:0px; margin:0px;
padding:0px; padding:0px;
} }
.bannerbackground {
background-color: #404040;
}
.view_app {
background-color: @theme_bg_color;
}
.view_app.view.cell:selected {
background-color:@theme_selected_bg_color;
color:@theme_selected_text_color;
transition: 10ms ease-out;
border-radius: 3px;
}
.boxInfoMessError{
background-color: #ea9999;
}
.boxInfoMessOK{
background-color: #f3f0ac;
}
scale>value {
font-size:17.5px;
}
#GnomeIcon{
border-style:solid;
border-bottom-width: 1px;
border-image: linear-gradient(90deg, alpha(@theme_text_color,0.4) 55%, alpha(@theme_bg_color, 0) 100%);
border-image-slice: 1;
}
#SepIcon{
background-color: alpha(@theme_text_color, 0.6);
}
#iconlabel {
font-size:14px;
font-weight: bold;
}
.roundborder * {
border-width:0px;
border-radius:5px;
}
.noborder { .noborder {
border: none; border:none;
} }
.nobackground {
.menu:hover { background:transparent;
border-color:alpha(@theme_text_color, 0.01);
}
.menu {
border-color:alpha(@theme_text_color, 0.01);
}
.menu:hover >* {
border-color:alpha(@theme_text_color, 0.01);
}
.menuitembottom{
margin-top:0px;
margin-bottom:3px;
} }
.nobackground:active {
.menuitemmiddle{ background:transparent;
margin-top:0px;
margin-bottom:0px;
} }
.textHead{
.menuitemtop{ text-shadow: 2px 2px @theme_bg_color;
margin-bottom:0px; color: @theme_text_color;
} }
.menuitemtop *{ .inherited>* {
margin:2px 2px 0 2px; border:none;
padding: 5px 10px 3px 5px; background:inherit;
} }
.workingbg {
.menuitemmiddle *{ background:@theme_base_color;
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
} }
.menuitembottom{
margin-top:0px;
margin-bottom:3px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemmiddle{
margin-top:0px;
margin-bottom:0px;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitembottom *{ .menuitemtop{
margin:0 2px 2px 2px; margin-bottom:0px;
padding: 3px 10px 5px 5px; border-color:inherit;
} border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemtop >*{
margin:6px 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitemmiddle >*{
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
border:transparent;
}
.menuitembottom >*{
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
}
.menuitemtop:hover {
background:@theme_bg_color;
border-color:inherit;
border-top-width:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitemmiddle:hover {
background:@theme_bg_color;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
}
.menuitembottom:hover {
background:@theme_bg_color;
border-color:inherit;
border-bottom-width:0px;
border-left-width:inherit;
border-right-width:inherit;
.menuitemtop:hover { }
background:@theme_bg_color; .menuitemtop:hover>* {
border-color:inherit; margin:6px 2px 0 2px;
border-left-width:inherit; padding: 3px 10px 3px 5px;
border-right-width:inherit; background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitemmiddle:hover>* {
margin:0 2px 0 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.menuitembottom:hover>* {
margin:0 2px 2px 2px;
padding: 3px 10px 3px 5px;
background:@theme_selected_bg_color;
border-radius:2px;
}
.boxInfoMessError{
background-color: #ea9999;
} }
.menuitemmiddle:hover { .boxInfoMessOK{
background:@theme_bg_color; background-color: #f3f0ac;
border-color:inherit;
border-left-width:inherit;
border-right-width:inherit;
} }
.errorBox {
.menuitembottom:hover { border-width: 2px;
background:@theme_bg_color; border-color: #ea9999;
border-color:inherit; border-style:solid;
border-left-width:inherit;
border-right-width:inherit;
} }
.menuitemtop:hover* { .chosenOutline{
margin:2px 2px 0 2px; transition: 0ms;
padding: 5px 10px 3px 5px; border-width: 1px;
background:@theme_selected_bg_color; border-color: #f3f0ac;
border-radius:2px; border-style:solid;
} }
.menuitemmiddle:hover* { .debugborders *{
margin:0 2px 0 2px; border-width: 2px;
padding: 3px 10px 3px 5px; border-color: #000000;
background:@theme_selected_bg_color; border-style: solid;
border-radius:2px;
} }
.menuitembottom:hover* { button {
margin:0 2px 2px 2px; min-width: 26px;
padding: 3px 10px 5px 5px; min-height: 24px;
background:@theme_selected_bg_color;
border-radius:2px;
} }
.workingbg, #workingbg { .workingbg, #workingbg {
@ -163,10 +149,6 @@ scale>value {
background-image: none; background-image: none;
} }
.noborder{
border:none;
}
.bkim{ .bkim{
opacity:0.99; opacity:0.99;
border:none; border:none;

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save