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
+
+
+
# 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
```
-
+# 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
- True
+ False
True
1
@@ -103,6 +103,7 @@
False
True
+ end
2
@@ -183,6 +184,7 @@