diff --git a/.gitignore b/.gitignore index 1ce2845..1312f6b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ ubl-settings-video.glade~ compile/ ubl-settings-video_ru.po~ ubl-settings-video-n.pot -vgcore.* \ No newline at end of file +vgcore.* +build/ +source/ubl-settings-video-cm.h \ No newline at end of file diff --git a/Makefile b/Makefile index 5cfec29..016422c 100644 --- a/Makefile +++ b/Makefile @@ -8,13 +8,10 @@ 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 FILE_VERSION = VERSION.md -DEPENDS = /bin/cmake +DEPENDS = /bin/cmake PREFIX ?= /usr PKGNAME = $(MAKEFILE_DIR) -#PKGNAME = ubl-settings-manager default_target: all @@ -24,7 +21,7 @@ all: init build init: @echo "Initialize ..."; \ - sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-video.h; \ + sed -r "s/(version_application).*/\1 = \"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-video.h; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: @@ -35,8 +32,8 @@ depend: exit 1; \ fi; \ done; \ + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B${CMAKE_BUILD_DIR} --check-build-system CMakeFiles/Makefile.cmake 1 || exit 1; \ echo "Check depends: OK" -# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 debug: @echo "Debug ..." @@ -84,10 +81,16 @@ uninstall: done; \ done @$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}" - @$(RM) "${DESTDIR}/etc/xdg/${PKGNAME}/${PKGNAME}.conf" @$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop" @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg" - @$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}/images" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/devices/com.ublinux.${PKGNAME}.display.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/devices/com.ublinux.${PKGNAME}.video-card.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/com.ublinux.${PKGNAME}.nvidia-logo.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/com.ublinux.${PKGNAME}.intel-logo.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/com.ublinux.${PKGNAME}.amd-logo.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/com.ublinux.${PKGNAME}.checked.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/com.ublinux.${PKGNAME}.warning.svg" + @$(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}.policy" @$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}" @if [ -z ${DESTDIR} ]; then \ [ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \ @@ -98,6 +101,7 @@ uninstall: install: check uninstall @echo "Install ..." + @gcc source/ubl-settings-video-cm.h source/ubl-settings-video.c source/ubl-settings-video.h source/ubl-settings-video-strings.h source/ubl-utils.c source/ubl-utils.h -o ubl-settings-video `pkg-config --cflags --libs gtk+-3.0 vte-2.91 webkit2gtk-4.0 webkit2gtk-web-extension-4.0` -g @for FILE_PO in $(wildcard *.po); do \ LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \ install -dm755 "${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES"; \ @@ -120,14 +124,13 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg" @install -dm755 "${DESTDIR}${PREFIX}/share/polkit-1/actions" - @install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.pkexec.${PKGNAME}.exec.policy" - @install -Dm655 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.${PKGNAME}.policy" + @install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}" @install -dm755 "${DESTDIR}${PREFIX}/share/applications" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop" - @install -dm655 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images} + @install -dm755 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images,csv} @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}.glade" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/css/" "${PKGNAME}.css" - @install -dm655 "${DESTDIR}${PREFIX}/share/${PKGNAME}/images" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "${PKGNAME}-banner.png" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/csv/" "resolutions.csv" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/csv/" "video-drivers.csv" diff --git a/README.md b/README.md index 87f9650..92e3459 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # ubl-settings-video -# Настройки видеоадаптера и дисплея +# Настройка видеоадаптера и дисплея +[RU] Утилита для настройки видеоадаптера и дисплея + +Utility for configuring the video adapter and display + +![alt text](screenshot/screenshot.png) + # Build In order to build ubl-settings-video you will need: @@ -7,23 +13,42 @@ In order to build ubl-settings-video you will need: - C compiler - GTK+ 3 & dependencies - vte-2.91 +- webkit2gtk + +Options for compiling: +`--nowebkit2gtk` - Compiling without webkit2gtk Once you have all the necessary dependencies, you can use: -```sh +```bash $ make ``` # Installation After a successful build, just use: -```sh +```bash $ sudo make install clean ``` # Uninstallation After a successful build, just use: -```sh +```bash $ sudo make uninstall ``` -![alt text](desc/ubl-settings-video-screenshot.png) +# Usage +```bash +$ ubl-settings-video --help +Configuring the video adapter and display for UBLinux + +Usage: ubl-settings-video [OPTIONS...] +Options: + -h, --help Show this help + -V, --version Show package version + --lock-save Lock saving local and global configuration + --lock-save-local Lock save global configuration + --lock-save-global Lock load global configuration + --lock-load-global Lock load global configuration +$ ubl-settings-video --version +ubl-settings-video version: x.xx +``` diff --git a/VERSION.md b/VERSION.md index 12ebd01..2923038 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -VERSION 1.0 +VERSION 2.1 diff --git a/com.ublinux.pkexec.ubl-settings-video.exec.policy b/com.ublinux.ubl-settings-video.policy similarity index 62% rename from com.ublinux.pkexec.ubl-settings-video.exec.policy rename to com.ublinux.ubl-settings-video.policy index 58a198c..4907138 100644 --- a/com.ublinux.pkexec.ubl-settings-video.exec.policy +++ b/com.ublinux.ubl-settings-video.policy @@ -7,11 +7,11 @@ UBLinux https://ublinux.ru - - Run "ubl-settings-video" as root - Запуск утилиты "ubl-settings-video" с правами root - Authentication is required to run "ubl-settings-video" - Требуется авторизация для запуска утилиты "ubl-settings-video" с правами root + + Run ubl-settings-video as root + Запуск утилиты ubl-settings-video с правами root + Authentication is required to run ubl-settings-video + Требуется авторизация для запуска утилиты ubl-settings-video с правами root auth_admin auth_admin diff --git a/desc/ubl-settings-video-screenshot.png b/screenshot/screenshot.png similarity index 100% rename from desc/ubl-settings-video-screenshot.png rename to screenshot/screenshot.png diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 29d9ec6..ff6b8b4 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -1,17 +1,21 @@ -cmake_minimum_required(VERSION 3.7) +cmake_minimum_required(VERSION 3.23) project(ubl-settings-video) find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED gtk+-3.0) -include_directories(${GTK_INCLUDE_DIRS}) -link_directories(${GTK_LIBRARY_DIRS}) -add_definitions(${GTK_CFLAGS_OTHER}) +pkg_check_modules(GTK3 REQUIRED gtk+-3.0) +include_directories(${GTK3_INCLUDE_DIRS}) +link_directories(${GTK3_LIBRARY_DIRS}) +add_definitions(${GTK3_CFLAGS_OTHER}) -option(WEBKIT_FOUND "No" OFF) +pkg_check_modules(VTE291 REQUIRED vte-2.91) +include_directories(${VTE291_INCLUDE_DIRS}) +link_directories(${VTE291_LIBRARY_DIRS}) +add_definitions(${VTE291_CFLAGS_OTHER}) find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) +option(WEBKIT_FOUND "No" OFF) if(WEBKIT_LIBRARIES_FOUND) option(WEBKIT_FOUND "Yes" ON) PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0) @@ -35,15 +39,12 @@ set(SOURCE_FILES ubl-settings-video-cm.h) set(LIBRARIES - ${GTK_LIBRARIES} - pthread - vte-2.91) - - -add_executable(ubl-settings-video ${SOURCE_FILES}) -target_link_libraries(ubl-settings-video PUBLIC ${WEBKIT_LIBRARIES} ${LIBRARIES}) -target_include_directories(ubl-settings-video PUBLIC - "${PROJECT_BINARY_DIR}" - ${WEBKIT_INCLUDE_DIRS} - ) -install(TARGETS ubl-settings-video DESTINATION bin) \ No newline at end of file + ${GTK3_LIBRARIES} + ${WEBKIT_LIBRARIES} + ${VTE291_LIBRARIES} + pthread) + +add_executable(${PROJECT_NAME} ${SOURCE_FILES}) +target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBRARIES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR}) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) diff --git a/source/ubl-settings-video-strings.h b/source/ubl-settings-video-strings.h index d400317..b43592a 100644 --- a/source/ubl-settings-video-strings.h +++ b/source/ubl-settings-video-strings.h @@ -42,6 +42,7 @@ #define SAVE_LABEL _("Save") #define ON_LABEL _("On") #define OFF_LABEL _("Off") +#define SWITCHED_OFF_LABEL _("Switched off") #define FBDEV_LABEL _("fbdev") #define AUTO_CHOOSE_DRIVERS_LABEL _("Automatically choose and use driver") #define LAUNCH_OPTIRUN_LABEL _("Launch programms through optirun (nVidia): ") @@ -55,6 +56,7 @@ #define DOCUMENTATION_LABEL _("Documentation") #define ABOUT_LABEL _("About") #define INSTALLED_LABEL _("Installed") +#define INSTALLED_LOW_LABEL _("installed") #define PACKAGE_LABEL _("Package") #define SUPPORTED_LABEL _("Supported Devices") #define CANCEL_LABEL _("Cancel") @@ -67,9 +69,14 @@ #define PROPRIETARY_OPETAION_DONE_LABEL _("Driver operation is done.") #define PROPRIETARY_NOTHING_SELECTED_LABEL _("Nothing was selected.") #define PROPRIETARY_USE_LOCAL_LABEL _("Failed to load available drivers for your system... Installed driver list is shown.") +#define CONFIGURE_LABEL _("Configure monitor") +#define DELETE_LABEL _("Delete monitor configuration") +#define ADD_LABEL _("Add monitor configuration") +#define SWITCH_LABEL _("Switch monitor") +#define MORE_LABEL _("More") #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 translated and supported by community.") +#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 INFORMATION_LABEL _("Information") #define DRIVERS_LABEL _("Drivers") diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index bb58c32..a84be10 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -2,19 +2,31 @@ config videoconfig; -void yon_on_plug_added(GtkSocket *self, gpointer user_data) -{ -} +// void on_apps_chooser_open(GtkWidget *self){ +// int size=0; +// config_str categories=yon_char_parsed_new(NULL,&size,"GTK",NULL); +// config_str names=yon_char_parsed_new(NULL,&size,"XFCE",NULL); +// config_str icons=yon_char_parsed_new(NULL,&size,"org.xfce.panel.Launcher",NULL); +// yon_app_chooser_show(categories,names,icons,size); +// } -void yon_on_plug_removed(GtkSocket *self, gpointer user_data) -{ -} void on_subwindow_close(GtkWidget *self) { gtk_widget_destroy(gtk_widget_get_toplevel(self)); } +void on_resized(GtkWidget *window, GdkEventConfigure *event){ + float time_passed = (float)clock()/(float)CLOCKS_PER_SEC; + if (time_passed>2){ + int width = gdk_window_get_width(gtk_widget_get_window(videoconfig.pack_box)); + int children_width = 138*g_list_length(gtk_container_get_children(GTK_CONTAINER((GtkWidget*)videoconfig.monitor_output_layers->first->data))); + if (widthchildren_width+150) + yon_monitor_view_draw_all(); + } + +} + void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){ monitorconfig *config = yon_dictionary_get_data(window->config,monitorconfig*); if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo))==0){ @@ -118,6 +130,7 @@ void yon_terminal_start(widgets_dict *widgets, char *usr_command){ widgets->TerminalInfoLabel = yon_gtk_builder_get_widget(builder, "TerminalInfoLabel"); GtkWidget *terminal = yon_gtk_builder_get_widget(builder, "TerminalTerminal"); + gtk_button_set_label(GTK_BUTTON(widgets->TerminalMoreButton),MORE_LABEL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); gtk_widget_set_app_paintable(terminal,1); gtk_style_context_add_class(gtk_widget_get_style_context(terminal),"opacited"); @@ -202,6 +215,43 @@ void on_driver_pack_delete(GtkWidget *self,widgets_dict *widgets){ } } +void on_driver_pack_selection_change(GtkWidget *self, widgets_dict *widgets){ + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); + if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ + int installed=0; + gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->proprietaryTreeView)),&iter,0,&installed,-1); + if (installed==1){ + gtk_widget_set_sensitive(widgets->proprietaryInstallButton,0); + gtk_widget_set_sensitive(widgets->proprietaryDeleteButton,1); + } else { + gtk_widget_set_sensitive(widgets->proprietaryInstallButton,1); + gtk_widget_set_sensitive(widgets->proprietaryDeleteButton,0); + } + } +} + +void on_driver_selection_change(GtkWidget *self, widgets_dict *widgets){ + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); + if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ + int installed=0; + gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->driversTreeView)),&iter,0,&installed,-1); + if (installed==1){ + gtk_widget_set_sensitive(widgets->driversInstallButton,0); + gtk_widget_set_sensitive(widgets->driversDeleteButton,1); + } else { + gtk_widget_set_sensitive(widgets->driversInstallButton,1); + gtk_widget_set_sensitive(widgets->driversDeleteButton,0); + } + } + +} + void on_driver_delete(GtkWidget *self,widgets_dict *widgets){ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_DELETING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); GtkTreeIter iter; @@ -251,34 +301,43 @@ void on_driver_info(GtkWidget *self,widgets_dict *widgets){ } void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){ - monitorconfig* config = yon_dictionary_get_data(window->config,monitorconfig*); - dictionary *dict=NULL; - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),0); - char *combo_text=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationPortCombo))); - char *resolution = yon_char_divide_search(combo_text," ",-1); - if (combo_text) - if (strcmp(combo_text,MONITOR_CHOOSE_PORT_LABEL)!=0){ - dict=yon_dictionary_find(&videoconfig.supported_resolutions,resolution); - if (dict){ - resolution_supported *res = yon_dictionary_get_data(dict,resolution_supported*); - int found_size=0; - for (int i=0;isize;i++){ - char *check_line; - for (int j=0;jline[i])){ - found_size++; - if(!config->resolutionCapabilities) config->resolutionCapabilities=new(char*); - else config->resolutionCapabilities=realloc(config->resolutionCapabilities,sizeof(char*)*found_size); - config->resolutionCapabilities[found_size-1]=videoconfig.resolutions[j]; - config->resolution_size=found_size; + if (yon_dictionary_get_data(window->config,monitorconfig*)->show_usupported==0){ + monitorconfig* config = yon_dictionary_get_data(window->config,monitorconfig*); + dictionary *dict=NULL; + for (int i=0;iresolutionssize;i++){ + free(window->resolutions); + } + window->resolutions=NULL; + window->resolutionssize=0; + int portid=gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo)); + if (portid!=0) + window->curport=videoconfig.ports[portid-1]; + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),0); + + if (window->curport){ + gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(window->mainMonitorConfigurationBox)),window->curport); + dict=yon_dictionary_find(&videoconfig.supported_resolutions,window->curport); + if (dict){ + resolution_supported *res = yon_dictionary_get_data(dict,resolution_supported*); + int found_size=0; + for (int i=0;isize;i++){ + char *check_line; + for (int j=0;jline[i])){ + found_size++; + if(!config->resolutionCapabilities) config->resolutionCapabilities=new(char*); + else config->resolutionCapabilities=realloc(config->resolutionCapabilities,sizeof(char*)*found_size); + config->resolutionCapabilities[found_size-1]=videoconfig.resolutions[j]; + config->resolution_size=found_size; + } } } + yon_gtk_combo_box_fill(window->templateMonitorConfigurationResolutionCombo,config->resolutionCapabilities, config->resolution_size); } - yon_gtk_combo_box_fill(window->templateMonitorConfigurationResolutionCombo,config->resolutionCapabilities, config->resolution_size); } } } @@ -387,10 +446,6 @@ void on_configuration_save_local(GtkWidget *self, widgets_dict *widgets) char *str=NULL; char *delstr=NULL; str=yon_configuration_get_save_command(save_drivers_local_command); - // delstr=yon_configuration_get_remove_command(remove_drivers_local_command); - // if (delstr){ - // yon_config_save(delstr); - // } if (str){ yon_config_save(str); yon_ubl_status_box_render(videoconfig.status_render,LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); @@ -421,10 +476,6 @@ void on_configuration_save_global(GtkWidget *self, widgets_dict *widgets) char *str=NULL; char *delstr=NULL; str=yon_configuration_get_save_command(save_drivers_global_command); - // delstr=yon_configuration_get_remove_command(remove_drivers_global_command); - // if (delstr){ - // yon_config_save(delstr); - // } if (str){ yon_config_save(str); yon_ubl_status_box_render(videoconfig.status_render,LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); @@ -436,6 +487,7 @@ void yon_update_config(widgets_dict *widgets) if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchOptirunCheck))==1) videoconfig.optirun = yon_char_new( (char *)gtk_entry_get_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry))); else videoconfig.optirun = NULL; + videoconfig.descreteOnly=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->mainHybridGraphicsDiscreteCheck)); if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchPrismusunCheck))==1) videoconfig.primusrun = yon_char_new( (char *)gtk_entry_get_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry))); else videoconfig.primusrun = NULL; @@ -448,6 +500,7 @@ void on_configuration_load_local(GtkWidget *self, widgets_dict *widgets) yon_setup_config(load_drivers_local_command); on_config_fill_interface(widgets); yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); + yon_ubl_status_box_render(videoconfig.status_render,LOCAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); } void on_configuration_load_global(GtkWidget *self, widgets_dict *widgets) @@ -456,6 +509,7 @@ void on_configuration_load_global(GtkWidget *self, widgets_dict *widgets) yon_setup_config(load_drivers_global_command); on_config_fill_interface(widgets); yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); + yon_ubl_status_box_render(videoconfig.status_render,GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); } /**void on_monitor_delete(GtkWidget *self,monitor_view windowd) @@ -495,7 +549,7 @@ void on_monitor_add(GtkWidget *self,monitor_window *window){ } void on_proprietary_get(GtkWidget *notebook, GtkWidget *page, int pagen, gpointer data){ - if (pagen==1){ + if (pagen==1&&videoconfig.dblock==0){ GtkTreeIter iter; if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(videoconfig.list),&iter)){ pthread_t tid; @@ -566,6 +620,7 @@ void on_monitor_configure(GtkWidget *self,monitor_window *window){ gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationSaveButton),MONITOR_SAVE_LABEL); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPortCombo),MONITOR_CHOOSE_PORT_LABEL); + monitors->curport=NULL; dictionary *dict=NULL; for (int i=0;itemplateMonitorConfigurationPositionPosCombo),0); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),PARAMETER_DEFAULT_LABEL); for (int i=0;itemplateMonitorConfigurationPositionPortCombo),videoconfig.ports[i]); + if (videoconfig.ports[i]!=monitors->config->key) + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),videoconfig.ports[i]); } gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPortCombo),0); @@ -602,7 +658,7 @@ void on_monitor_configure(GtkWidget *self,monitor_window *window){ } void on_read_documentation(GtkWidget *self,gpointer user_data){ - yon_ubl_browser_window_open(UBLINUX_WIKI_LINK,WEB_VIEW_TITLE_LABEL); + yon_ubl_browser_window_open(user_data,WEB_VIEW_TITLE_LABEL); } @@ -614,6 +670,8 @@ void on_link(GtkWidget *self, char* link, gpointer user_data){ if (GTK_IS_ABOUT_DIALOG(self)){ gtk_widget_destroy(self); } + if (!link) + link=UBLINUX_WIKI_LINK; if (videoconfig.alwaysredirect==0){ GtkBuilder *builder=gtk_builder_new_from_file(glade_path); GtkWidget *sureWindow=yon_gtk_builder_get_widget(builder,"HelpSureWindow"); @@ -624,7 +682,7 @@ void on_link(GtkWidget *self, char* link, gpointer user_data){ GtkWidget *textLabel=yon_gtk_builder_get_widget(builder,"helpText"); GtkWidget *alwaysOpenCheck=yon_gtk_builder_get_widget(builder,"AlwaysOpenHelpCheckbox"); - g_signal_connect(G_OBJECT(readButton),"clicked",G_CALLBACK(on_read_documentation),NULL); + g_signal_connect(G_OBJECT(readButton),"clicked",G_CALLBACK(on_read_documentation),yon_char_new(link)); g_signal_connect(G_OBJECT(readButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(cancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(alwaysOpenCheck),"toggled",G_CALLBACK(on_toggle),&videoconfig.alwaysredirect); @@ -638,7 +696,7 @@ void on_link(GtkWidget *self, char* link, gpointer user_data){ gtk_widget_show(sureWindow); }else { - on_read_documentation(NULL,NULL); + on_read_documentation(NULL,link); } } @@ -661,10 +719,22 @@ void on_about() void yon_monitor_window_update(monitor_edit_window *window){ if (window){ - int found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationPortCombo, window->config->key); + int found = yon_char_parsed_check_exist(videoconfig.ports,videoconfig.portssize, window->config->key); if (found==-1) found=0; + else + found++; gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo),found); + on_resolutions_unsupported_show(window->templateMonitorConfigurationShowUnsupportedCheck,window); + if (((monitorconfig*)window->config->data)->resolutionCapabilities){ + // printf("%s\n",((monitorconfig*)window->config->data)->resolution); + found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationResolutionCombo, ((monitorconfig*)window->config->data)->resolution); + }else{ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationShowUnsupportedCheck),1); + found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationResolutionCombo, ((monitorconfig*)window->config->data)->resolution); + } + if (found==-1) + found=0; gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),found); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),PARAMETER_DEFAULT_LABEL); @@ -689,33 +759,62 @@ void yon_monitor_window_update(monitor_edit_window *window){ } - /**void yon_monitor_view_draw_all(GtkWidget *cnt) * [EN] */ -void yon_monitor_view_draw_all(GtkWidget *cnt){ +void yon_monitor_view_draw_all(){ monitor_view dict=NULL; GtkWidget *container=NULL; - if(!container&&cnt) container=cnt; + + + if(videoconfig.monitor_visuals){ for_dictionaries(dict,videoconfig.monitor_visuals){ monitor_window *window = yon_dictionary_get_data(dict,monitor_window*); - if (!container) container = gtk_widget_get_parent(window->templateMonitorscreenOverlay); + container = gtk_widget_get_parent(window->templateMonitorscreenOverlay); if(container){ g_object_ref(G_OBJECT(window->templateMonitorscreenOverlay)); gtk_container_remove(GTK_CONTAINER(container),window->templateMonitorscreenOverlay); } } - if (container) + dictionary *boxes=NULL; + if (videoconfig.monitor_output_layers) + for_dictionaries(boxes,videoconfig.monitor_output_layers){ + gtk_widget_destroy((GtkWidget*)boxes->data); + if (boxes->prev) + free(boxes->prev); + boxes->prev=NULL; + } + free(boxes); + videoconfig.monitor_output_layers=NULL; + int overall_width=0; + yon_dictionary_add_or_create_if_exists_with_data(videoconfig.monitor_output_layers,"Box",gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0)); + gtk_box_pack_start(GTK_BOX(videoconfig.pack_box),&*(GtkWidget*)videoconfig.monitor_output_layers->data,0,0,0); + gtk_widget_show((GtkWidget*)videoconfig.monitor_output_layers->data); for_dictionaries(dict,videoconfig.monitor_visuals){ monitor_window *window = yon_dictionary_get_data(dict,monitor_window*); if(dict->first==dict) {} else { - gtk_box_pack_start(GTK_BOX(container),window->templateMonitorscreenOverlay,0,0,0); + overall_width+=138; + GtkWidget *boxpack=(GtkWidget*)videoconfig.monitor_output_layers->data; + gtk_box_pack_start(GTK_BOX(boxpack),window->templateMonitorscreenOverlay,0,0,0); + } + int width=0; + GdkWindow *cur_window = gtk_widget_get_window(videoconfig.pack_box); + if(cur_window) + width = gdk_window_get_width(cur_window); + if (overall_width+138>width){ + overall_width=0; + GtkWidget *boxpack=NULL; + yon_dictionary_add_or_create_if_exists_with_data(videoconfig.monitor_output_layers,"Box",(boxpack=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0))); + gtk_widget_show((GtkWidget*)videoconfig.monitor_output_layers->data); + gtk_box_pack_start(GTK_BOX(videoconfig.pack_box),boxpack,0,0,0); } + } + gtk_widget_show((GtkWidget*)videoconfig.monitor_output_layers->data); monitor_window *window = yon_dictionary_get_data(videoconfig.monitor_visuals->first,monitor_window*); - gtk_box_pack_start(GTK_BOX(container),window->templateMonitorscreenOverlay,0,0,0); + gtk_box_pack_start(GTK_BOX(((GtkWidget*)videoconfig.monitor_output_layers->data)),window->templateMonitorscreenOverlay,0,0,0); } yon_monitor_view_update(); } @@ -983,27 +1082,50 @@ void on_config_fill_interface(widgets_dict *widgets) */ dictionary *yon_proprieary_get(){ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + videoconfig.dblock=1; videoconfig.proprietary=NULL; int drivers_size=0; - config_str drivers=yon_config_load(get_proprietary_drivers_command,&drivers_size); int size=0; - char **rtn = yon_config_load(get_proprietary_drivers_info_command,&size); - for (int drivers_found=0;drivers_founddata,&size,";"); - printf("%s\n",str[0]); if (strcmp(str[0],"")!=0&&str[0]){ gtk_list_store_append(videoconfig.list,&iter); gtk_list_store_set(videoconfig.list,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + if (yon_char_parsed_check_exist(installed,inssize,str[0])!=-1) + gtk_list_store_set(videoconfig.list,&iter,0,1,-1); } else{ - gtk_list_store_append(videoconfig.list2,&iter); - gtk_list_store_set(videoconfig.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + gtk_list_store_append(videoconfig.list2,&iter); + gtk_list_store_set(videoconfig.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + if (yon_char_parsed_check_exist(installed,inssize,str[1])!=-1){ + gtk_list_store_set(videoconfig.list2,&iter,0,1,-1); + } } - if (strstr(dict->key," installed")) - gtk_list_store_set(videoconfig.list,&iter,0,1,-1); } } } @@ -1093,6 +1222,7 @@ void yon_setup_config(char *configcommand) videoconfig.failsafenVidia=NULL; videoconfig.gapfix=0; videoconfig.loaded_config=NULL; + videoconfig.dblock=0; if(videoconfig.optirun) free(videoconfig.optirun); videoconfig.optirun=NULL; @@ -1283,6 +1413,10 @@ void yon_monitor_view_new(monitor_config monitor){ window->templateMonitorInfoAddButton=yon_gtk_builder_get_widget(builder,"templateMonitorInfoAddButton"); window->config=NULL; gtk_overlay_add_overlay(GTK_OVERLAY(window->templateMonitorscreenOverlay),window->templateMonitorInfoBox); + gtk_widget_set_tooltip_text(window->templateMonitorDeleteButton,DELETE_LABEL); + gtk_widget_set_tooltip_text(window->templateMonitorInfoConfigureButton,CONFIGURE_LABEL); + gtk_widget_set_tooltip_text(window->templateMonitorSwitchButton,SWITCH_LABEL); + gtk_widget_set_tooltip_text(window->templateMonitorInfoAddButton,ADD_LABEL); if (monitor){ window->config=monitor; gtk_widget_hide(window->templateMonitorInfoAddButton); @@ -1357,9 +1491,10 @@ void yon_adapter_window_setup(widgets_dict *widgets){ yon_char_divide_search(product,"=",-1); char *vendor = yon_config_get_parameter(rtn,size,"vendor"); yon_char_divide_search(vendor,"=",-1); - char *driver_use = yon_config_get_parameter(rtn,size,"Kernel_driver_in_use"); + char *driver_use = yon_config_get_parameter(rtn,size,"Kernel-driver-in-use"); yon_char_divide_search(driver_use,"=",-1); - char *driver_all = yon_config_get_parameter(rtn,size,"Kernel_modules"); + char *driver_all = yon_config_get_parameter(rtn,size,"Kernel-modules"); + driver_all = yon_char_replace(driver_all,"-"," "); yon_char_divide_search(driver_all,"=",-1); char *final_text = yon_char_unite("",DESCRIPTION_LABEL,": ",_(desc), "\n",VENDOR_LABEL,": ",vendor, @@ -1371,7 +1506,7 @@ void yon_adapter_window_setup(widgets_dict *widgets){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } - else if (strstr(vendor,"NVidia")){ + else if (strstr(vendor,"NVIDIA")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } @@ -1494,8 +1629,9 @@ void yon_setup_widgets(widgets_dict *widgets) widgets->driverDriverColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverDriverColumn")); widgets->driverDescriptionColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverDescriptionColumn")); widgets->driverSupportedColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverSupportedColumn")); - - gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),TITLE_LABEL); + videoconfig.pack_box=widgets->mainMonitorVisualConfigurationBox; + // g_signal_connect(G_OBJECT(widgets->MainWindow), "check-resize", G_CALLBACK(on_resized), NULL); + gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),SETTINGS_VIDEO_TITLE_LABEL); videoconfig.list = GTK_LIST_STORE(gtk_builder_get_object(widgets-> builder, "liststore6")); videoconfig.list2 = GTK_LIST_STORE(gtk_builder_get_object(widgets-> builder, "liststore1")); @@ -1507,6 +1643,8 @@ void yon_setup_widgets(widgets_dict *widgets) g_signal_connect(G_OBJECT(widgets->proprietaryDeleteButton), "clicked", G_CALLBACK(on_driver_pack_delete), widgets); g_signal_connect(G_OBJECT(widgets->proprietaryInstallButton), "clicked", G_CALLBACK(on_driver_pack_install), widgets); g_signal_connect(G_OBJECT(widgets->proprietaryInfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); + g_signal_connect(G_OBJECT(widgets->proprietaryTreeView), "cursor-changed", G_CALLBACK(on_driver_pack_selection_change), widgets); + g_signal_connect(G_OBJECT(widgets->driversTreeView), "cursor-changed", G_CALLBACK(on_driver_selection_change), widgets); g_signal_connect(G_OBJECT(widgets->driversDeleteButton), "clicked", G_CALLBACK(on_driver_delete), widgets); g_signal_connect(G_OBJECT(widgets->driversInstallButton), "clicked", G_CALLBACK(on_driver_install), widgets); @@ -1521,7 +1659,7 @@ void yon_setup_widgets(widgets_dict *widgets) g_signal_connect(G_OBJECT(widgets->MainWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); - // g_signal_connect(G_OBJECT(widgets->extraOptirunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); + // g_signal_connect(G_OBJECT(widgets->extraOptirunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), NULL); // g_signal_connect(G_OBJECT(widgets->extraPrimusunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsAboutMenuItem), "activate", G_CALLBACK(on_about), NULL); @@ -1539,9 +1677,11 @@ void yon_setup_widgets(widgets_dict *widgets) gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), OFF_LABEL); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), FBDEV_LABEL); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), SWITCHED_OFF_LABEL); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), GAP_FIX_1_LABEL); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), GAP_FIX_2_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->headInfoLabel), HEADER_LABEL); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainExtraFixGapCombo),0); + gtk_label_set_text(GTK_LABEL(widgets->headInfoLabel), SETTINGS_VIDEO_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeNvidiaLabel), FAILSAFE_NVIDIA_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeAMDLabel), FAILSAFE_ATI_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainDriverFrameLabel), DRIVER_LABEL); @@ -1549,7 +1689,7 @@ void yon_setup_widgets(widgets_dict *widgets) gtk_label_set_text(GTK_LABEL(widgets->mainHybridGraphicsFrameLabel), HYBRID_GRAPHICS_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainExtraFixGapLabel), FIX_GAP_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainExtraFrameLabel), EXTRA_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderTitleLabel), TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->mainHeaderTitleLabel), SETTINGS_VIDEO_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainHeaderConfigLoadLabel), LOAD_LABEL); gtk_label_set_text(GTK_LABEL(widgets->mainHeaderSaveConfigurationLabel), SAVE_LABEL); @@ -1675,9 +1815,14 @@ int main(int argc, char *argv[]) } if (getuid()!=0){ - system("/usr/bin/pkexec ubl-settings-video"); + char *args=""; + for (int i=0;i #include #include +#include #include "ubl-utils.h" +// #include "ubl-settings-app-chooser.h" #include "ubl-settings-video-strings.h" #ifndef UBL_SETINGS_VIDEO_H #define UBL_SETINGS_VIDEO_H @@ -39,7 +41,7 @@ #define get_ports_command "xrandr |grep -E \"*connected\" |cut -d' ' -f1" #define get_resolutions_command "xrandr |grep -noP \"\\d+x+\\d+\"" -#define get_resolution_ports_command "xrandr |grep -nwP \"connected\" |grep -oE \"[0-9a-zA-Z:]{1,10} connected\" |grep -oE \"[0-9a-zA-Z:]{1,10} \"" +#define get_resolution_ports_command "xrandr |grep -nwP \"connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} \"" #define get_proprietary_drivers_info_command "cut -d';' -f2- /usr/share/ubl-settings-video/csv/video-drivers.csv | grep -E \"-\"" @@ -71,12 +73,12 @@ #define get_version_proprietary_command "grep \"VERSION_ID=\" /etc/os-release | cut -d= -f2" -#define get_proprietary_drivers_command "LC_ALL=C pacman -Ssy ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}-nvidia-[a-zA-Z0-9-]{1,}|installed\"|sed ':a;N;$!ba;s/\\ninstalled/ installed/g'" -#define get_proprietary_drivers_local_command "LC_ALL=C pacman -Qq |grep -E \"ubm-nvidia-\"" - +#define get_proprietary_drivers_command "pkexec pacman -Ssy ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}-nvidia-[a-zA-Z0-9-]{1,}\"" +#define get_proprietary_drivers_local_command "pkexec pacman -Qq |grep -E \"ubm-nvidia-\"" +#define get_proprietary_installed_command yon_char_unite("pkexec pacman -Ss nvidia-.* |grep -E ",INSTALLED_LOW_LABEL," |grep -oE \"ubm-nvidia-[0-9a-zA-Z]{1,}|nvidia-[0-9]{1,4}xx-dkms\"",NULL) // #define get_proprietary_drivers_command "LC_ALL=C pacman -Ss ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}nvidia-[a-zA-Z0-9-]{1,}|installed\"|sed ':a;N;$!ba;s/\\ninstalled/ installed/g'" -#define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ]{1,}\"|sed 's/: /=/g'|sed 's/ /_/g'" +#define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ,_]{1,}\"|sed 's/: /=/g'|sed 's/ /-/g'" #define XORG_MONITOR(port) yon_char_get_augumented(" XORG_MONITOR[",yon_char_get_augumented(port,"] ")) @@ -90,7 +92,7 @@ char *local; typedef char *string; -string version_application = "1.6"; +string version_application = "2.1"; #define _(String) gettext(String) @@ -137,6 +139,9 @@ typedef struct int lock_save_global; int lock_load_global; int lock_help; + dictionary *monitor_output_layers; + GtkWidget *pack_box; + int dblock; } config; typedef struct @@ -287,6 +292,10 @@ typedef struct typedef struct { + char *curport; + config_str resolutions; + int resolutionssize; + GtkWidget *templateMonitorConfigurationWindow; GtkWidget *mainMonitorConfigurationBox; GtkWidget *templateMonitorConfigurationBox; @@ -359,7 +368,7 @@ void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_ void yon_monitor_view_new(monitor_config monitor); void on_configuration_save_global_local(GtkWidget *self, widgets_dict *widgets); // void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings); -void yon_monitor_view_draw_all(GtkWidget *cnt); +void yon_monitor_view_draw_all(); void on_monitor_configure(GtkWidget *self,monitor_window *window); void on_monitor_add(GtkWidget *self,monitor_window *window); void on_monitor_switch(GtkWidget *self,monitor_window *window); diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 1f6e44d..22a9d3d 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -465,6 +465,7 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) return source; } } + /**[EN] * char *yon_char_from_int(int int_to_convert) * converts int to char*. @@ -486,6 +487,21 @@ char *yon_char_from_int(int int_to_convert) return ch; } +char *yon_char_replace(char *source, char *find, char*replace){ + char *final=NULL; + char *temp=NULL; + if(!strstr(replace,find)){ + while ((final=strstr(source,find))){ + temp=malloc(strlen(source)-strlen(final)); + memset(temp,0,strlen(source)-strlen(final)+strlen(replace)); + memcpy(temp,source,strlen(source)-strlen(final)); + temp=yon_char_get_augumented(temp,replace); + source=yon_char_get_augumented(temp,final+1); + } + return source; + } +} + /**[EN] * char **yon_char_parse(char *parameters, int *size, char *divider) * Parses string [parameters], divided by [divider], @@ -544,6 +560,42 @@ int yon_char_parsed_check_exist(char **parameters, int size, char *param){ return -1; } +int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size){ + int overall_found=0; + for (int i=0;i-1&&left_window){ plug_left=gtk_plug_new(socket_left_id); @@ -968,6 +1020,17 @@ void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWi gtk_style_context_add_class(gtk_widget_get_style_context(plug_left),"noborder"); gtk_widget_show(plug_left); } + else if (left_window){ + if (box==NULL){ + box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + gtk_box_pack_start(GTK_BOX(main_window),box,0,0,5); + gtk_box_reorder_child(GTK_BOX(main_window),box,0); + gtk_widget_show(box); + } + gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"inherited"); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(left_window)),left_window); + gtk_box_pack_end(GTK_BOX(box),left_window,0,0,5); + } if (socket_right_id>-1&&right_window){ plug_right=gtk_plug_new(socket_right_id); g_object_ref(right_window); @@ -980,6 +1043,17 @@ void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWi gtk_style_context_add_class(gtk_widget_get_style_context(plug_right),"noborder"); gtk_widget_show(plug_right); } + else if (right_window){ + if (box==NULL){ + box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + gtk_box_pack_start(GTK_BOX(main_window),box,0,0,5); + gtk_box_reorder_child(GTK_BOX(main_window),box,0); + gtk_widget_show(box); + } + gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"inherited"); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(right_window)),right_window); + gtk_box_pack_start(GTK_BOX(box),right_window,0,0,5); + } g_object_ref(main_window); gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(main_window)),main_window); gtk_container_add(GTK_CONTAINER(plug_main),main_window); diff --git a/source/ubl-utils.h b/source/ubl-utils.h index 3b254bb..80d0d1a 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -80,8 +80,8 @@ typedef char** config_str; * [type] - тип данных, хранящихся в словаре [dictionary]. */ #define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data) -#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) if (!dict) dict=yon_dictionary_create_with_data(key,data); \ - else dict=yon_dictionary_create_with_data_connected(dict,key,data); +#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_create_with_data(key,data); \ + else dict=yon_dictionary_create_with_data_connected(dict,key,data);} dictionary *yon_dictionary_create_empty(); @@ -125,6 +125,8 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider); char *yon_char_from_int(int 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_shrink(char **char_string, int *size, int item_to_delete); @@ -133,7 +135,9 @@ 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 (config_str old, int *old_size, ...); // parsing functions diff --git a/ubl-settings-video.css b/ubl-settings-video.css index 6ee85b9..5ca43e9 100644 --- a/ubl-settings-video.css +++ b/ubl-settings-video.css @@ -9,6 +9,10 @@ margin:0px; padding:0px; } +.inherited>* { + border:none; + background:inherit; +} .opacited { opacity:0.98; } diff --git a/ubl-settings-video.desktop b/ubl-settings-video.desktop index c19f6f0..c68d568 100644 --- a/ubl-settings-video.desktop +++ b/ubl-settings-video.desktop @@ -3,7 +3,7 @@ Encoding=UTF-8 Name=ubl-settings-video Name[ru]=Настройки видеоадаптера и дисплея GenericName=ubl-settings-video -GenericName[ru]=Настройки Видеоадаптера и дисплея +GenericName[ru]=Настройки видеоадаптера и дисплея Comment=Application for managing video adapter and display settings Comment[ru]=Приложение для управления настройками видеоадаптера и дисплея Type=Application @@ -12,4 +12,4 @@ Icon=com.ublinux.ubl-settings-video Terminal=false X-XfcePluggable=true X-UBLPluggable=true -Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-HardwareSettings; +Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-HardwareSettings;X-UBL-SettingsManager;X-UBL-HardwareSettings; diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 20af17d..a2b05a3 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -11,7 +11,6 @@ False False 450 - 250 dialog-question-symbolic @@ -74,7 +73,8 @@ start 10 10 - You will be redirected to documentation website where documentation is translated and supported by community. + You will be redirected to documentation website where documentation is +translated and supported by community. True 0 - True + False True 1 @@ -103,6 +103,7 @@ False True + end 2 @@ -183,6 +184,7 @@ True False + True True @@ -195,7 +197,6 @@ - True False 32 dialog-question-symbolic @@ -693,15 +694,20 @@ True False + True + Switch system-shutdown-symbolic True False + True + Delete user-trash-symbolic False + True value-increase-symbolic @@ -712,6 +718,7 @@ True False + Configure open-menu-symbolic