diff --git a/com.ublinux.ubl-settings-video.amd-logo.svg b/com.ublinux.ubl-settings-video.amd-logo.svg
index c75c6d2..b8a741c 100644
--- a/com.ublinux.ubl-settings-video.amd-logo.svg
+++ b/com.ublinux.ubl-settings-video.amd-logo.svg
@@ -19,7 +19,44 @@
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
+ id="defs10">
+
+
+
+
+
+
+
+
AMD icon
-
@@ -53,4 +86,35 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/com.ublinux.ubl-settings-video.intel-logo.svg b/com.ublinux.ubl-settings-video.intel-logo.svg
index fa4fcb2..a704324 100644
--- a/com.ublinux.ubl-settings-video.intel-logo.svg
+++ b/com.ublinux.ubl-settings-video.intel-logo.svg
@@ -16,7 +16,44 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
+ id="defs10">
+
+
+
+
+
+
+
+
+ style="stroke-width:0.165814;filter:url(#filter3075)"
+ transform="matrix(0.84740862,0,0,0.84740862,4.882924,4.8829241)" />
diff --git a/com.ublinux.ubl-settings-video.nvidia-logo.svg b/com.ublinux.ubl-settings-video.nvidia-logo.svg
index d4f2d8b..755bf1e 100644
--- a/com.ublinux.ubl-settings-video.nvidia-logo.svg
+++ b/com.ublinux.ubl-settings-video.nvidia-logo.svg
@@ -17,7 +17,44 @@
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
+ id="defs12">
+
+
+
+
+
+
+
+
generated by pstoedit version:3.44 from NVBadge_2D.eps
+ transform="matrix(0.06760249,0,0,0.06760249,35.173187,-8.514446)"
+ style="filter:url(#filter2175)">
diff --git a/com.ublinux.ubl-settings-video.video-card.svg b/com.ublinux.ubl-settings-video.video-card.svg
index 7c30d8b..7a7601b 100644
--- a/com.ublinux.ubl-settings-video.video-card.svg
+++ b/com.ublinux.ubl-settings-video.video-card.svg
@@ -14,7 +14,36 @@
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
+ inkscape:current-layer="layer2" />
+
@@ -53,53 +83,68 @@
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="Layer 1"
+ style="display:none">
+ style="fill:#6c797a"
+ d="M 24.389,38.655 C 22.629,36.623 21.415,33.659 21.094,30.279 21.091,30.254 21.089,30.229 21.086,30.204 21.035,29.645 21,29.079 21,28.5 c 0,-0.579 0.035,-1.145 0.086,-1.704 0.003,-0.025 0.005,-0.05 0.008,-0.075 0.321,-3.38 1.535,-6.344 3.295,-8.376 0.781,-1.046 1.67,-2.005 2.667,-2.845 H 17 c -4.971,0 -9,5.82 -9,13 0,7.18 4.029,13 9,13 h 10.057 c -0.998,-0.84 -1.886,-1.8 -2.668,-2.845 z"
+ id="path24" />
-
+ style="fill:#cbd4d8"
+ d="M 4,7.5 H 1 c -0.553,0 -1,0.447 -1,1 0,0.553 0.447,1 1,1 h 2 v 41 c 0,0.553 0.447,1 1,1 0.553,0 1,-0.447 1,-1 V 8.5 C 5,7.947 4.553,7.5 4,7.5 Z"
+ id="path58" />
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index b0fba42..29d9ec6 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -8,6 +8,19 @@ include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})
add_definitions(${GTK_CFLAGS_OTHER})
+option(WEBKIT_FOUND "No" OFF)
+
+find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
+
+if(WEBKIT_LIBRARIES_FOUND)
+ option(WEBKIT_FOUND "Yes" ON)
+ PKG_CHECK_MODULES(WEBKIT REQUIRED webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
+ include_directories(${WEBKIT_INCLUDE_DIRS})
+ link_directories(${WEBKIT_LIBRARY_DIRS})
+ add_definitions(${WEBKIT_CFLAGS_OTHER})
+endif()
+
+configure_file(ubl-settings-video.h.in ubl-settings-video-cm.h)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -lm")
@@ -19,7 +32,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin
set(SOURCE_FILES
ubl-settings-video.c
ubl-utils.c
-)
+ ubl-settings-video-cm.h)
set(LIBRARIES
${GTK_LIBRARIES}
@@ -28,5 +41,9 @@ set(LIBRARIES
add_executable(ubl-settings-video ${SOURCE_FILES})
-target_link_libraries(ubl-settings-video ${LIBRARIES})
+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
diff --git a/source/ubl-settings-video-strings.h b/source/ubl-settings-video-strings.h
index 3693de7..e3fb4f5 100644
--- a/source/ubl-settings-video-strings.h
+++ b/source/ubl-settings-video-strings.h
@@ -37,7 +37,7 @@
#define HYBRID_GRAPHICS_LABEL _("Hybrid graphics")
#define FIX_GAP_LABEL _("Fix frame gap (nVidia)")
#define EXTRA_LABEL _("Extra")
-#define TITLE_LABEL _("UBlinux Video Configuration")
+#define TITLE_LABEL _("UBLinux Video Configuration")
#define LOAD_LABEL _("Load")
#define SAVE_LABEL _("Save")
#define ON_LABEL _("On")
@@ -60,13 +60,24 @@
#define CANCEL_LABEL _("Cancel")
#define ACCEPT_LABEL _("Accept")
#define DONT_USE_LABEL _("Don't use")
+#define PROPRIETARY_LOADING_LABEL _("Driver list is currently loading...")
+#define PROPRIETARY_LOADING_FAILED_LABEL _("Driver list is failed to load.")
+#define PROPRIETARY_DELETING_IN_PROGRESS_LABEL _("Deleting driver...")
+#define PROPRIETARY_INSTALLING_IN_PROGRESS_LABEL _("Installing driver...")
+#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 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_ALWAYS_OPEN_LABEL _("Always redirect to online documentation")
#define INFORMATION_LABEL _("Information")
#define DRIVERS_LABEL _("Drivers")
#define MAIN_SETTINGS_LABEL _("Main settings")
#define DEVICES_DRIVERS_LABEL _("Devices and drivers")
#define DRIVER_MODULES_LABEL _("Driver modules")
+#define WEB_VIEW_TITLE_LABEL _("UBLinux Settings Web View")
#define MONITOR_POSITION_LEFT_PARAMETER "lo:"
#define MONITOR_POSITION_RIGHT_PARAMETER "ro:"
diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c
index 9b223b3..aea0871 100644
--- a/source/ubl-settings-video.c
+++ b/source/ubl-settings-video.c
@@ -18,9 +18,7 @@ void on_subwindow_close(GtkWidget *self)
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){
- videoconfig.status_render.text_to_render=MONITOR_PORT_ERROR_LABEL;
- videoconfig.status_render.type=BACKGROUND_IMAGE_FAIL_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ yon_ubl_status_box_render(videoconfig.status_render,MONITOR_PORT_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
return;
}
config->main=0;
@@ -33,10 +31,8 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){
config->position_port=NULL;
config->port=NULL;
config->resolution=NULL;
- config->frequency=NULL;
- videoconfig.status_render.text_to_render=MONITOR_PORT_SUCCESS_LABEL;
- videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ config->frequency=0;
+ yon_ubl_status_box_render(videoconfig.status_render,MONITOR_PORT_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
config->port = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationPortCombo));
window->config->key = yon_char_new(config->port);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationParameterLineCheck))==0){
@@ -52,6 +48,8 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){
config->position_port = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationPositionPortCombo));
}
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationFrequencyCombo))>0)
+ config->frequency=gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationFrequencyCombo));
if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo))!=0) {
config->resolution =yon_char_divide_search((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)),";",-1);
int rotation = gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationRotationCombo));
@@ -87,6 +85,7 @@ void on_terminal_destroy(GtkWidget *self, widgets_dict *widgets){
gtk_widget_destroy(widgets->TerminalRevealer);
yon_proprieary_get();
yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data)
@@ -162,48 +161,59 @@ void yon_terminal_start(widgets_dict *widgets, char *usr_command){
}
void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_INSTALLING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
GtkTreeIter iter;
char *name;
GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView));
- gtk_tree_selection_get_selected(selection,&list_s,&iter);
- gtk_tree_model_get(list_s,&iter,1,&name,-1);
- yon_terminal_start(widgets,yon_char_get_augumented(install_proprietary_command,name));
-
-
+ if(gtk_tree_selection_get_selected(selection,&list_s,&iter)){
+ gtk_tree_model_get(list_s,&iter,1,&name,-1);
+ yon_terminal_start(widgets,yon_char_get_augumented(install_proprietary_command,name));
+ } else {
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
void on_driver_install(GtkWidget *self,widgets_dict *widgets){
-
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_INSTALLING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
GtkTreeIter iter;
char *name;
GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView));
- gtk_tree_selection_get_selected(selection,&list_s,&iter);
- gtk_tree_model_get(list_s,&iter,1,&name,-1);
- yon_terminal_start(widgets,yon_char_get_augumented(install_proprietary_command,name));
+ if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){
+ gtk_tree_model_get(list_s,&iter,1,&name,-1);
+ yon_terminal_start(widgets,yon_char_get_augumented(install_proprietary_command,name));
+ } else {
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
void on_driver_pack_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;
char *name;
GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView));
- gtk_tree_selection_get_selected(selection,&list_s,&iter);
- gtk_tree_model_get(list_s,&iter,1,&name,-1);
- yon_terminal_start(widgets,yon_char_get_augumented(delete_proprietary_command,name));
+ if(gtk_tree_selection_get_selected(selection,&list_s,&iter)){
+ gtk_tree_model_get(list_s,&iter,1,&name,-1);
+ yon_terminal_start(widgets,yon_char_get_augumented(delete_proprietary_command,name));
+ } else {
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
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;
char *name;
GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView));
- gtk_tree_selection_get_selected(selection,&list_s,&iter);
- gtk_tree_model_get(list_s,&iter,1,&name,-1);
- yon_terminal_start(widgets,yon_char_get_augumented(delete_proprietary_command,name));
+ if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){
+ gtk_tree_model_get(list_s,&iter,1,&name,-1);
+ yon_terminal_start(widgets,yon_char_get_augumented(delete_proprietary_command,name));
+ } else {
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
void on_driver_pack_info(GtkWidget *self, widgets_dict *widgets){
@@ -215,9 +225,12 @@ void on_driver_pack_info(GtkWidget *self, widgets_dict *widgets){
char *name;
GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView));
- gtk_tree_selection_get_selected(selection,&list_s,&iter);
- gtk_tree_model_get(list_s,&iter,1,&name,-1);
- pthread_create(&tid,&attr,(void*)yon_launch_app,yon_char_get_augumented(get_info_proprietary_command,name));
+ if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){
+ gtk_tree_model_get(list_s,&iter,1,&name,-1);
+ pthread_create(&tid,&attr,(void*)yon_launch_app,yon_char_get_augumented(get_info_proprietary_command,name));
+ } else {
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
void on_driver_info(GtkWidget *self,widgets_dict *widgets){
@@ -229,10 +242,12 @@ void on_driver_info(GtkWidget *self,widgets_dict *widgets){
char *name;
GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView));
- gtk_tree_selection_get_selected(selection,&list_s,&iter);
- gtk_tree_model_get(list_s,&iter,1,&name,-1);
- pthread_create(&tid,&attr,(void*)yon_launch_app,yon_char_get_augumented(get_info_proprietary_command,name));
-
+ if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){
+ gtk_tree_model_get(list_s,&iter,1,&name,-1);
+ pthread_create(&tid,&attr,(void*)yon_launch_app,yon_char_get_augumented(get_info_proprietary_command,name));
+ } else {
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
}
void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){
@@ -311,11 +326,11 @@ char *yon_configuration_get_save_command(char *command){
str = yon_char_unite(str, " FAILSAFENVIDIA=\"\" FAILSAFEATI=\"\" VGADRV_AUTO=YES", NULL);
}
- if (strcmp(videoconfig.optirun, dntus)!=0&&strcmp(videoconfig.optirun, "")!=0)
+ if (videoconfig.optirun&&strcmp(videoconfig.optirun, dntus)!=0&&strcmp(videoconfig.optirun, "")!=0)
str = yon_char_get_augumented(str, yon_char_unite(" OPTIRUN=","\"",videoconfig.optirun,"\"",NULL));
else
str = yon_char_get_augumented(str, yon_char_unite(" OPTIRUN=\"\"",NULL));
- if (strcmp(videoconfig.primusrun, dntus)!=0&&strcmp(videoconfig.primusrun, "")!=0)
+ if (videoconfig.primusrun&&strcmp(videoconfig.primusrun, dntus)!=0&&strcmp(videoconfig.primusrun, "")!=0)
str = yon_char_get_augumented(str, yon_char_unite(" PRIMUSRUN=","\"", videoconfig.primusrun,"\"",NULL));
else
str = yon_char_get_augumented(str, yon_char_unite(" PRIMUSRUN=\"\"",NULL));
@@ -378,21 +393,14 @@ void on_configuration_save_local(GtkWidget *self, widgets_dict *widgets)
// }
if (str){
yon_config_save(str);
-
- videoconfig.status_render.text_to_render=LOCAL_SAVE_SUCCESS;
- videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ yon_ubl_status_box_render(videoconfig.status_render,LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
- // else
- // yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration saving failed."), BACKGROUND_IMAGE_FAIL_TYPE);
}
void on_configuration_save_local_global(GtkWidget *self, widgets_dict *widgets)
{
on_configuration_save_global_local(self, widgets);
- videoconfig.status_render.text_to_render=GLOBAL_LOCAL_SAVE_SUCCESS;
- videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ yon_ubl_status_box_render(videoconfig.status_render,GLOBAL_LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
void on_configuration_save_global_local(GtkWidget *self, widgets_dict *widgets)
@@ -403,10 +411,7 @@ void on_configuration_save_global_local(GtkWidget *self, widgets_dict *widgets)
str=yon_configuration_get_save_command(save_drivers_global_local_command);
if (str){
yon_config_save(str);
-
- videoconfig.status_render.text_to_render=LOCAL_SAVE_SUCCESS;
- videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ yon_ubl_status_box_render(videoconfig.status_render,LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
}
@@ -422,17 +427,18 @@ void on_configuration_save_global(GtkWidget *self, widgets_dict *widgets)
// }
if (str){
yon_config_save(str);
-
- videoconfig.status_render.text_to_render=LOCAL_SAVE_SUCCESS;
- videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ yon_ubl_status_box_render(videoconfig.status_render,LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
}
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;
+ 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;
videoconfig.failsafenVidia = yon_char_new( gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo)));
videoconfig.failsafeATI = yon_char_new( gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo)));
}
@@ -488,6 +494,17 @@ void on_monitor_add(GtkWidget *self,monitor_window *window){
}
}
+void on_proprietary_get(GtkWidget *notebook, GtkWidget *page, int pagen, gpointer data){
+ if (pagen==1){
+ GtkTreeIter iter;
+ if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(videoconfig.list),&iter)){
+ pthread_t tid;
+ pthread_create(&tid,NULL,(void*)yon_proprieary_get,NULL);
+ }
+ }
+
+}
+
void on_monitor_configure(GtkWidget *self,monitor_window *window){
if(window&&window->config){
monitor_edit_window *monitors = new(monitor_edit_window);
@@ -584,6 +601,45 @@ 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);
+
+}
+
+void on_toggle(GtkWidget *self, int *changing_var){
+ *changing_var = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
+}
+
+void on_link(GtkWidget *self, char* link, gpointer user_data){
+ if (GTK_IS_ABOUT_DIALOG(self)){
+ gtk_widget_destroy(self);
+ }
+ if (videoconfig.alwaysredirect==0){
+ GtkBuilder *builder=gtk_builder_new_from_file(glade_path);
+ GtkWidget *sureWindow=yon_gtk_builder_get_widget(builder,"HelpSureWindow");
+ GtkWidget *readButton=yon_gtk_builder_get_widget(builder,"ReadHelpButton");
+ GtkWidget *cancelButton=yon_gtk_builder_get_widget(builder,"CancelHelpButton");
+ GtkWidget *titleLabel=yon_gtk_builder_get_widget(builder,"helpHeader");
+ GtkWidget *headQuestionLabel=yon_gtk_builder_get_widget(builder,"webHeaderNameLabel");
+ 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_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);
+
+ gtk_label_set_text(GTK_LABEL(titleLabel),SETTINGS_VIDEO_TITLE_LABEL);
+ gtk_label_set_text(GTK_LABEL(headQuestionLabel),HELP_TITLE_LABEL);
+ gtk_label_set_text(GTK_LABEL(textLabel),HELP_INFO_LABEL);
+ gtk_button_set_label(GTK_BUTTON(alwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL);
+
+ gtk_widget_show(sureWindow);
+ }else {
+ on_read_documentation(NULL,NULL);
+ }
+}
+
/**void on_about()
* [EN]
*/
@@ -594,8 +650,9 @@ void on_about()
GtkWidget *hideButtonBox = yon_gtk_builder_get_widget(builder, "buttonBoxHide");
gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(window), _("UBlinux Video Configuration"));
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window), version_application);
- gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window), _("Progect Home Page"));
+ gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window), _("Project Home Page"));
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), _("Videocard and monitor configuration manager"));
+ g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL);
gtk_widget_set_visible(hideButtonBox, 0);
gtk_widget_show(window);
}
@@ -611,6 +668,7 @@ void yon_monitor_window_update(monitor_edit_window *window){
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),PARAMETER_DEFAULT_LABEL);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),"60");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),"75");
+ gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationFrequencyCombo),0);
found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationPositionPortCombo, yon_dictionary_get_data(window->config,monitorconfig*)->position_port);
if (found==-1)
found=0;
@@ -692,9 +750,14 @@ void yon_monitor_view_update(){
gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoNameLabel),yon_char_get_augumented(MONITOR_LABEL,""));
monitorconfig *params=yon_dictionary_get_data(yon_dictionary_get_data(dict,monitor_window*)->config,monitorconfig*);
gtk_widget_set_sensitive(yon_dictionary_get_data(dict,monitor_window*)->templateMonitorImage,params->enable);
- if (config->resolution)
- gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoResolutionLabel),config->resolution);
- else if (params->stringparameters){
+ if (config->resolution){
+ char *freq="";
+ if (config->frequency>0){
+ if (config->frequency==1) freq ="60";
+ else if (config->frequency==2) freq="75";
+ }
+ gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoResolutionLabel),yon_char_unite(config->resolution,":",freq,NULL));
+ }else if (params->stringparameters){
int size=0;
config_str rtn=yon_char_parse(params->stringparameters,&size,",");
char *res=yon_char_divide_search(yon_char_new(yon_char_parsed_get_resolution(rtn,size))," ",-1);
@@ -845,15 +908,15 @@ char *yon_monitor_make_string(monitorconfig* config)
char *frequency="";
- if (config->frequency)
- if (first==1){
- frequency=config->frequency;
- first=0;
- }else{
- frequency=yon_char_get_augumented(",",config->frequency);
- }
+ if (config->frequency){
+ if (config->frequency==1) frequency="x60";
+ else if (config->frequency==2) frequency="x75";
+ }
+ if (strcmp(resolution,"")!=0)
+ resolution=yon_char_get_augumented(resolution,frequency);
+
- char *stringparameters=yon_char_unite("",main,resolution,frequency,enable,position,rotation,dpms,cvt,reduced,gtf,NULL);
+ char *stringparameters=yon_char_unite("",main,resolution,enable,position,rotation,dpms,cvt,reduced,gtf,NULL);
config->stringparameters=yon_char_new(stringparameters);
}
@@ -917,6 +980,7 @@ void on_config_fill_interface(widgets_dict *widgets)
* [EN]
*/
dictionary *yon_proprieary_get(){
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
videoconfig.proprietary=NULL;
int drivers_size=0;
config_str drivers=yon_config_load(get_proprietary_drivers_command,&drivers_size);
@@ -936,6 +1000,35 @@ dictionary *yon_proprieary_get(){
else videoconfig.proprietary=yon_dictionary_create_with_data_connected(videoconfig.proprietary,drivers[drivers_found],rtn[i]);
}
}
+ if (videoconfig.proprietary){
+ yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
+ yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ } else {
+ drivers=yon_config_load(get_proprietary_drivers_local_command,&drivers_size);
+ if (drivers){
+ printf("%s\n",drivers[0]);
+ for (int drivers_found=0;drivers_founddata,&size,";");
- gtk_list_store_append(list,&iter);
- gtk_list_store_set(list,&iter,1,str[0],2,str[1],3,str[2],4,str[3],-1);
- if (strstr(dict->key," installed"))
- gtk_list_store_set(list,&iter,0,1,-1);
+ if(videoconfig.proprietary){
+ dictionary *dict=NULL;
+ gtk_list_store_clear(list);
+ for_dictionaries(dict,videoconfig.proprietary){
+ GtkTreeIter iter;
+ int size=0;
+ config_str str = yon_char_parse((char*)dict->data,&size,";");
+ gtk_list_store_append(list,&iter);
+ gtk_list_store_set(list,&iter,1,str[0],2,str[1],3,str[2],4,str[3],5,str[4],-1);
+ if (strstr(dict->key," installed"))
+ gtk_list_store_set(list,&iter,0,1,-1);
+ }
}
}
@@ -1064,7 +1159,6 @@ void yon_setup_config(char *configcommand)
for (int i=0;iposition_port=NULL;
monitor->resolution=NULL;
monitor->resolutionCapabilities=NULL;
- monitor->frequency=NULL;
+ monitor->frequency=0;
monitor->rotation=0;
monitor->stringparameters=NULL;
monitor->dpms=0;
@@ -1149,6 +1243,7 @@ void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_
}
}
+
char *yon_char_parsed_get_resolution(config_str parsed_string, int size){
char *left=NULL, *right=NULL, *freq=NULL;
for (int i=0;i",USED_KERNEL_DRIVER_LABEL,": ",driver_use,
"\n",AVALIABLE_KERNEL_DRIVERS_LABEL,": ",driver_all,"",NULL);
gtk_label_set_markup(GTK_LABEL(gtk_builder_get_object(widgets->builder,"InformationLabel")),final_text);
- if (strcmp(vendor,"Intel Corporation")==0){
+ if (strstr(vendor,"Intel")){
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 (strcmp(vendor,"NVidia Corporation")==0){
+ 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));
}
- else if (strcmp(vendor,"AMD Corporation")==0){
+ else if (strstr(vendor,"AMD")){
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.amd-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL));
}
@@ -1365,6 +1460,7 @@ void yon_setup_widgets(widgets_dict *widgets)
widgets->driversDeleteButton = yon_gtk_builder_get_widget(widgets->builder, "driversDeleteButton");
widgets->driversInstallButton = yon_gtk_builder_get_widget(widgets->builder, "driversInstallButton");
widgets->TerminalOverlay = yon_gtk_builder_get_widget(widgets->builder, "TerminalOverlay");
+ widgets->MenusTab = yon_gtk_builder_get_widget(widgets->builder, "MenusTab");
widgets->driversTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(widgets->builder, "driversTreeSelection"));
widgets->proprietartInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "proprietartInstalledColumn"));
@@ -1388,11 +1484,14 @@ void yon_setup_widgets(widgets_dict *widgets)
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.list = GTK_LIST_STORE(gtk_builder_get_object(widgets-> builder, "liststore6"));
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->proprietaryTreeView),GTK_TREE_MODEL(videoconfig.list));
+ g_signal_connect(G_OBJECT(widgets->MenusTab), "switch-page", G_CALLBACK(on_proprietary_get), 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);
@@ -1414,7 +1513,7 @@ void yon_setup_widgets(widgets_dict *widgets)
// 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);
- g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsDocumentationMenuItem), "activate", G_CALLBACK(on_about), NULL);
+ g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsDocumentationMenuItem), "activate", G_CALLBACK(on_link), NULL);
g_signal_connect(G_OBJECT(widgets->mainHeaderLoadGlobalMenuItem), "activate", G_CALLBACK(on_configuration_load_global), widgets);
g_signal_connect(G_OBJECT(widgets->mainHeaderLoadLocalMenuItem), "activate", G_CALLBACK(on_configuration_load_local), widgets);
@@ -1572,13 +1671,10 @@ int main(int argc, char *argv[])
yon_setup_config(load_drivers_local_command);
widgets_dict widgets;
yon_setup_widgets(&widgets);
- yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
+ // yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
// yon_gtk_list_store_fill_with_proprietaries(videoconfig.modulelist);
gtk_widget_show(widgets.MainWindow);
- // yon_fill_ui(&widgets);
- videoconfig.status_render.text_to_render=LOCAL_LOAD_SUCCESS;
- videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE;
- yon_ubl_status_box_render(&videoconfig.status_render);
+ yon_ubl_status_box_render(videoconfig.status_render,LOCAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
on_config_fill_interface(&widgets);
yon_monitor_set_resolutions();
yon_adapter_window_setup(&widgets);
diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h
index 82d5b18..c4120fe 100644
--- a/source/ubl-settings-video.h
+++ b/source/ubl-settings-video.h
@@ -1,5 +1,9 @@
#include
#include
+#include "ubl-settings-video-cm.h"
+#ifdef WEBKIT_FOUND
+ #include
+#endif
#include
#include
#include
@@ -16,6 +20,8 @@
#ifndef UBL_SETINGS_VIDEO_H
#define UBL_SETINGS_VIDEO_H
+#define UBLINUX_WIKI_LINK " https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-video"
+
#define icon_name "com.ublinux.ubl-settings-video"
#define banner_path "/usr/share/ubl-settings-video/images/ubl-settings-video-banner.png"
@@ -66,6 +72,7 @@
#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 "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'"
@@ -101,6 +108,7 @@ typedef struct {
typedef struct
{
+ int alwaysredirect;
config_str loaded_config;
int configsize;
int autoChooseDrivers;
@@ -139,7 +147,7 @@ typedef struct
char *port;
char *resolution;
config_str resolutionCapabilities;
- char *frequency;
+ int frequency;
int rotation;
char *stringparameters;
int dpms;
@@ -272,6 +280,8 @@ typedef struct
GtkWidget *PlugBox;
GtkWidget *PlugSaveBox;
GtkWidget *PlugLoadBox;
+
+ GtkWidget *MenusTab;
} widgets_dict;
typedef struct
diff --git a/source/ubl-settings-video.h.in b/source/ubl-settings-video.h.in
new file mode 100644
index 0000000..d4623a7
--- /dev/null
+++ b/source/ubl-settings-video.h.in
@@ -0,0 +1 @@
+#cmakedefine WEBKIT_FOUND
diff --git a/source/ubl-utils.c b/source/ubl-utils.c
index 866c980..1f6e44d 100644
--- a/source/ubl-utils.c
+++ b/source/ubl-utils.c
@@ -853,98 +853,6 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi
#endif
-
-// dictionary *yon_gtk_app_chooser_create(GtkBuilder *builder){
-// GtkWidget *chooserWindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
-// GtkWidget *Box=gtk_box_new(GTK_ORIENTATION_VERTICAL,5);
-// GtkWidget *Frame=gtk_frame_new("");
-// GtkWidget *Scroll=gtk_scrolled_window_new(NULL, gtk_adjustment_new(0,0,10000,1,10,100));
-// GtkWidget *PackBox=gtk_box_new(GTK_ORIENTATION_VERTICAL,5);
-// GtkWidget *ButtonsBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
-// GtkWidget *ButtonsPlaceBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
-
-// GtkWidget *CancelButton=gtk_button_new_with_label("Cancel");
-// GtkWidget *AcceptButton=gtk_button_new_with_label("Accept");
-// gtk_container_add(GTK_CONTAINER(chooserWindow),Box);
-// gtk_box_pack_start(GTK_BOX(Box),Frame,1,1,0);
-// gtk_container_add(GTK_CONTAINER(Frame),PackBox);
-// gtk_box_pack_start(GTK_BOX(Box),ButtonsBox,0,0,0);
-// gtk_box_pack_end(GTK_BOX(ButtonsBox),ButtonsPlaceBox,0,0,0);
-// gtk_box_pack_end(GTK_BOX(ButtonsPlaceBox),AcceptButton,0,0,0);
-// gtk_box_pack_end(GTK_BOX(ButtonsPlaceBox),CancelButton,0,0,0);
-// gtk_box_pack_start(GTK_BOX(PackBox),(GtkWidget*)yon_gtk_app_chooser_apps_create(builder),0,0,0);
-// gtk_widget_show_all(chooserWindow);
-// }
-
-/**
- * yon_iv_segment_create:
- * connect_to - dictionary, in the end of which new one will be connected;
- * name - name of this segment, renders on label;
- * categories - desktop file categories that application NEEDS to have to render in that category;
- * segment_icon_name - icon name for this section;
- * builder - newly allocated builder with glade file connected where template widgets are stored:
- * - templateAppsIconView - setted up icon view;
- * - templateAppsPack - setted up container for every template widget;
- * - templateAppsImage - image for rendering section image;
- * - templateAppsLabel - label for rendering section name;
- */
-// dictionary *yon_iv_segment_create(dictionary *connect_to, char *name, char *categories, char *segment_icon_name){
-// IVSegment *segment=malloc(sizeof(IVSegment));
-// segment->name=name;
-// segment->categories=categories;
-// GtkBuilder *builder=gtk_builder_new_from_string(return_app_string(),-1);
-// GtkWidget *iv=yon_gtk_builder_get_widget(builder,"templateAppsIconView");
-// GtkWidget *expander=yon_gtk_builder_get_widget(builder,"templateAppsPack");
-// GtkWidget *image=yon_gtk_builder_get_widget(builder,"templateAppsImage");
-// GtkWidget *label=yon_gtk_builder_get_widget(builder,"templateAppsLabel");
-// GtkIconTheme *theme=gtk_icon_theme_get_default();
-// gtk_image_set_from_pixbuf(GTK_IMAGE(image),gtk_icon_theme_load_icon_for_scale(theme,segment_icon_name,20,1,GTK_ICON_LOOKUP_FORCE_SVG,NULL));
-// gtk_label_set_text(GTK_LABEL(label),name);
-// GtkListStore *ls=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore5"));
-// // g_signal_connect(G_OBJECT(iv), "item-activated", G_CALLBACK(on_activate), videoconfig.applist);
-// segment->Expander=expander;
-// segment->IV=iv;
-// segment->LS=ls;
-// segment->Image=image;
-// dictionary *dict=NULL;
-// if (connect_to) {
-// // connect_to=yon_dictionary_get_last(connect_to);
-// dict=yon_dictionary_create_with_data_connected(connect_to,name,segment);
-// } else
-// dict=yon_dictionary_create_with_data(name,segment);
-// return dict;
-// }
-
-// GtkWidget *yon_gtk_app_chooser_apps_create(){
-// GtkWidget *Box=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
-// dictionary *IVS=yon_iv_segment_create(NULL, "Graphics", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Tools", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Internet", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Multimedia", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Settings", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Education", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Office", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Other", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "Development", "", "dialog-yes-symbolic");
-// yon_iv_segment_create(IVS, "System", "", "dialog-yes-symbolic");
-// dictionary *nd;
-// for_dictionaries(nd,IVS){
-// gtk_box_pack_start(GTK_BOX(Box),((IVSegment*)nd->data)->Expander,0,0,0);
-// }
-// return Box;
-
-// }
-
-// GtkWidget *yon_gtk_socket_create_new_with_connect(GtkWidget *container, gpointer data){
-// GtkWidget *socket;
-// socket = gtk_socket_new();
-// g_signal_connect(G_OBJECT(socket),"plug-added",G_CALLBACK(yon_on_plug_added),data);
-// g_signal_connect(G_OBJECT(socket),"plug-removed",G_CALLBACK(yon_on_plug_removed),data);
-// g_signal_connect(G_OBJECT(socket),"destroy",G_CALLBACK(yon_on_plug_removed),data);
-// gtk_box_pack_start(GTK_BOX(container),socket,1,1,0);
-// return socket;
-// };
-
int yon_gtk_combo_box_fill(GtkWidget *combo, config_str parameters,int size){
if (combo&¶meters){
for (int i=0;i-1){
gtk_widget_hide(gtk_widget_get_toplevel(main_window));
@@ -1063,4 +987,47 @@ void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWi
}
}
+#ifdef WEBKIT_FOUND
+
+/**yon_ubl_browser_window_open(char *link, char *browser_window_name)
+ * [EN]
+ * Launches integrated browser window, named [browser_window_name] at header with [link].
+ * [RU]
+ * Открывает встроенный браузер с именем [browser_window_name] и показываемой страницей по ссылке [link]
+*/
+void yon_ubl_browser_window_open(char *link, char *browser_window_name){
+ GtkWidget *browser=gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *web_place=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
+ GtkWidget *header=gtk_header_bar_new();
+ GtkWidget *header_label=gtk_label_new(browser_window_name);
+ GtkWidget *WebView=webkit_web_view_new();
+ gtk_container_add(GTK_CONTAINER(browser),web_place);
+ gtk_window_set_titlebar(GTK_WINDOW(browser),header);
+ gtk_window_set_title(GTK_WINDOW(browser),browser_window_name);
+ gtk_widget_set_size_request(browser,800,600);
+ gtk_header_bar_set_custom_title(GTK_HEADER_BAR(header),header_label);
+ gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header),1);
+ webkit_web_view_load_uri(WEBKIT_WEB_VIEW(WebView),link);
+ gtk_box_pack_start(GTK_BOX(web_place),WebView,1,1,0);
+ gtk_widget_show_all(browser);
+}
+#else
+
+/**yon_ubl_browser_window_open(char *link, char *browser_window_name)
+ * [EN]
+ * Launches browser with [link].
+ * [browser_window_name] is't used. It's needed for compatibility with webkit version of that function.
+ * [RU]
+ * Открывает браузер со страницей по ссылке [link]
+ * [browser_window_name] не используется. Нужна для совместимости с webkit версией этой функции.
+*/
+void yon_ubl_browser_window_open(char *link, char *browser_window_name){
+ char *user=getenv("SUDO_USER");
+ if (!user)
+ user=getlogin();
+ char *command=yon_char_unite("sudo -u ",user," xdg-open ", link,NULL);
+ yon_launch_app(command);
+}
+#endif
+
#endif
\ No newline at end of file
diff --git a/source/ubl-utils.h b/source/ubl-utils.h
index aaa4b13..3b254bb 100644
--- a/source/ubl-utils.h
+++ b/source/ubl-utils.h
@@ -11,6 +11,10 @@
#include
#include
+#include "ubl-settings-video-cm.h"
+#ifdef WEBKIT_FOUND
+ #include
+#endif
#define DesktopPath "/usr/share/applications/"
#define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next)
@@ -65,7 +69,16 @@ typedef struct apps
typedef char** config_str;
// 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)
#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);
@@ -150,10 +163,20 @@ int yon_launch(thread_output *thread);
#ifdef __GTK_H__
#ifdef VTE_TERMINAL
+
+/**
+ *
+*/
void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument);
#endif
-#define yon_gtk_builder_get_widget(obj, obj2) GTK_WIDGET(gtk_builder_get_object(obj, obj2))
+/**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
{
@@ -173,17 +196,11 @@ 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);
-GtkWidget *yon_gtk_socket_create_new_with_connect(GtkWidget *container, gpointer data);
-
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding);
int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding);
-// uninitialised
-
-void yon_on_plug_added(GtkSocket *self, gpointer user_data);
-void yon_on_plug_removed(GtkSocket *self, gpointer user_data);
typedef enum
@@ -198,21 +215,83 @@ typedef struct {
GtkWidget *box;
GtkWidget *label;
char* text_to_render;
- char** text_strings_to_render;
- int strings_size;
} render_data;
-
-#define yon_ubl_status_box_render(render) {pthread_attr_t attr; pthread_attr_init(&attr); pthread_t tid; pthread_create(&tid,&attr,(void*)_yon_ubl_status_box_render,((void*)render)); }
+/**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 в котором будет отображаться текст статусного сообщения;
+*/
+#define yon_ubl_status_box_setup(render,icon,box,label) {render.icon=GTK_WIDGET(icon); render.box=GTK_WIDGET(box); render.label=GTK_WIDGET(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 (Жёлтный фон, иконка - галка)
+*/
+#define yon_ubl_status_box_render(render,text,m_type) {render.text_to_render=text; render.type=m_type; pthread_attr_t attr; pthread_attr_init(&attr); pthread_t tid; pthread_create(&tid,&attr,(void*)_yon_ubl_status_box_render,((void*)&render)); }
#ifdef __cplusplus
+
+/**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.gobj()), GTK_WIDGET(head.gobj()), GTK_WIDGET(image.gobj()), (char *)imag_path)
#else
+
+/**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)
#endif
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
void _yon_ubl_status_box_render(render_data *datav);
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
#endif
\ No newline at end of file
diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade
index 96a64d2..6d6de85 100644
--- a/ubl-settings-video.glade
+++ b/ubl-settings-video.glade
@@ -7,6 +7,203 @@
+
True
False
@@ -108,6 +305,66 @@
+
+ 800
+ 558
+ False
+ 800
+ 558
+ ubconfig-gui
+
+
+ True
+ False
+ vertical
+
+
+
+
+
+
+
+
+
+
False
False
@@ -147,9 +404,6 @@
0
-
-
-
@@ -1125,6 +1379,8 @@
+
+
@@ -1239,7 +1495,7 @@
-
+
@@ -1826,7 +2083,7 @@
150
- 3
+ 4
@@ -1841,7 +2098,7 @@
220
- 4
+ 5
@@ -1950,7 +2207,7 @@
0
vertical
True
- 2
+ 4
@@ -1969,9 +2226,12 @@
Package
-
+
+ word
+ 175
+
- 1
+ 2
@@ -1982,7 +2242,7 @@
- 2
+ 3
@@ -1997,7 +2257,7 @@
150
- 3
+ 4
@@ -2012,7 +2272,7 @@
220
- 4
+ 5
diff --git a/ubl-settings-video.pot b/ubl-settings-video.pot
index 6c39565..93a6c48 100644
--- a/ubl-settings-video.pot
+++ b/ubl-settings-video.pot
@@ -22,12 +22,52 @@ msgstr ""
msgid "Don't use"
msgstr ""
+#: source/ubl-settings-video-strings.h:63
+msgid "Driver list is currently loading..."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:64
+msgid "Driver list is failed to load."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:65
+msgid "Deleting driver..."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:66
+msgid "Installing driver..."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:67
+msgid "Driver operation is done."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:68
+msgid "Nothing was selected."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:69
+msgid "Failed to load available drivers for your system... Installed driver list is shown."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:71
+msgid "Would you like to read documentation in the Web?"
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:72
+msgid "You will be redirected to documentation website where documentation is translated and supported by community."
+msgstr ""
+
+#: source/ubl-settings-video-strings.h:73
+msgid "Always redirect to online documentation"
+msgstr ""
+
#: source/ubl-settings-video.c:581 source/ubl-settings-video-strings.h:40
-msgid "UBlinux Video Configuration"
+msgid "UBLinux Video Configuration"
msgstr ""
#: source/ubl-settings-video.c:583
-msgid "Progect Home Page"
+msgid "Project Home Page"
msgstr ""
#: source/ubl-settings-video.c:584
diff --git a/ubl-settings-video_ru.po b/ubl-settings-video_ru.po
index f9744c5..b756a3c 100644
--- a/ubl-settings-video_ru.po
+++ b/ubl-settings-video_ru.po
@@ -22,12 +22,53 @@ msgstr ""
msgid "Don't use"
msgstr "Не использовать"
+#: source/ubl-settings-video-strings.h:63
+msgid "Driver list is currently loading..."
+msgstr "Список драйверов загружается..."
+
+#: source/ubl-settings-video-strings.h:64
+msgid "Driver list is failed to load."
+msgstr "Не удалось загрузить список драйверов"
+
+#: source/ubl-settings-video-strings.h:65
+msgid "Deleting driver..."
+msgstr "Удаление драйвера..."
+
+#: source/ubl-settings-video-strings.h:66
+msgid "Installing driver..."
+msgstr "Установка драйвера..."
+
+#: source/ubl-settings-video-strings.h:67
+msgid "Driver operation is done."
+msgstr "Операция завершена"
+
+#: source/ubl-settings-video-strings.h:68
+msgid "Nothing was selected."
+msgstr "Выберите драйвер."
+
+#: source/ubl-settings-video-strings.h:69
+msgid "Failed to load available drivers for your system... Installed driver list is shown."
+msgstr "Не удалось загрузить список драйверов, доступных для вашей системы. Выведен список установленных драйверов."
+
+#: source/ubl-settings-video-strings.h:71
+msgid "Would you like to read documentation in the Web?"
+msgstr "Вы хотите прочитать справку в Сети?"
+
+#: source/ubl-settings-video-strings.h:72
+msgid "You will be redirected to documentation website where documentation is translated and supported by community."
+msgstr "Вы будете перенаправлены на сайт с документацией где страницы помощи "
+"переводятся и поддерживаются сообществом."
+
+#: source/ubl-settings-video-strings.h:73
+msgid "Always redirect to online documentation"
+msgstr "Всегда перенаправлять"
+
#: source/ubl-settings-video.c:581 source/ubl-settings-video-strings.h:40
-msgid "UBlinux Video Configuration"
+msgid "UBLinux Video Configuration"
msgstr "Видеокарта/Экран"
#: source/ubl-settings-video.c:583
-msgid "Progect Home Page"
+msgid "Project Home Page"
msgstr "Домашняя страница проекта"
#: source/ubl-settings-video.c:584
@@ -76,35 +117,35 @@ msgstr "Аргументы:"
#: source/ubl-settings-video-strings.h:2
msgid "Show this help"
-msgstr "Показать эту справку"
+msgstr "Показать параметры справки"
#: source/ubl-settings-video-strings.h:2
msgid "Show package version"
-msgstr "Показать версию пакета"
+msgstr "Показать текущую версию"
#: source/ubl-settings-video-strings.h:2
msgid "Lock this help menu"
-msgstr "Запретить вывод этой справки"
+msgstr "Блокировка вызова справки"
#: source/ubl-settings-video-strings.h:2
#, fuzzy
msgid "Lock configration saving"
-msgstr "Запретить сохранение конфигурации"
+msgstr "Блокировка сохранения локальной и глобальной конфигурации"
#: source/ubl-settings-video-strings.h:2
#, fuzzy
msgid "Lock local configration saving"
-msgstr "Запретить сохранение локальной конфигурации"
+msgstr "Блокировка сохранения локальной конфигурации"
#: source/ubl-settings-video-strings.h:2
#, fuzzy
msgid "Lock global configration saving"
-msgstr "Запретить сохранение глобальной конфигурации"
+msgstr "Блокировка сохранения глобальной конфигурации"
#: source/ubl-settings-video-strings.h:2
#, fuzzy
msgid "Lock global configration loading"
-msgstr "Запретить загрузку глобальной конфигурации"
+msgstr "Блокировка загрузки глобальной конфигурации"
#: source/ubl-settings-video-strings.h:3
msgid "Default settings"
diff --git a/video-drivers.csv b/video-drivers.csv
index 78f380e..7f38275 100644
--- a/video-drivers.csv
+++ b/video-drivers.csv
@@ -1,8 +1,9 @@
-VERSION_ID;DRV_PAСKAGE;DRV_NAME;DRV_DESCRIPTION;DRV_SUPPORT
-2204;ubm-nvidia-340;nvidia-340;Пакет с модулем драйвера и утилиты NVIDIA 340xx;Драйвер видеокарт nVidia серий 8XXX, 9XXX, 1XX, 2XX, 3XX, 4XX, 5XX, 6XX, 7XX
-2204;ubm-nvidia-390;nvidia-390;Пакет с модулем драйвера и утилиты NVIDIA 390xx;Драйвер видеокарт nVidia серий 4XX, 5XX, 6XX, 7XX, 9XX, 10XX
-2204;ubm-nvidia-430;nvidia-430;Пакет с модулем включает в себя драйвер NVIDIA 430xx и утилиты;Драйвер видеокарт nVidia серий 6XX, 7XX, 9XX, 10XX, 16XX
-2204;ubm-nvidia-470;nvidia-470;Пакет с модулем драйвера и утилиты NVIDIA 470xx;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
-2204;ubm-nvidia-510;nvidia-510;Пакет с модулем драйвера и утилиты NVIDIA 510xx;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
-2204;ubm-nvidia-515;nvidia-515;Пакет с модулем драйвера и утилиты NVIDIA 515xx;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
-2204;ubm-nvidia-optimus;nvidia-optimus;Пакет с модулем включает в себя NVIDIA Optimus;
+OS_VERSION_ID;DRV_PAСKAGE_UBM;DRV_PAСKAGE;DRV_NAME;DRV_DESCRIPTION;DRV_SUPPORT
+2204;ubm-nvidia-340;;nvidia-340;UBLinux module includes NVIDIA 340xx driver and utilities;Драйвер видеокарт nVidia серий 8XXX, 9XXX, 1XX, 2XX, 3XX, 4XX, 5XX, 6XX, 7XX
+2204;;nvidia-340xx-dkms;nvidia-340;UBLinux module includes NVIDIA 340xx driver and utilities;Драйвер видеокарт nVidia серий 8XXX, 9XXX, 1XX, 2XX, 3XX, 4XX, 5XX, 6XX, 7XX
+2204;ubm-nvidia-390;;nvidia-390;UBLinux module includes NVIDIA 390xx driver and utilities;Драйвер видеокарт nVidia серий 6XX, 7XX, 9XX, 10XX, 16XX
+2204;;nvidia-390xx-dkms;nvidia-390;UBLinux module includes NVIDIA 390xx driver and utilities;Драйвер видеокарт nVidia серий 6XX, 7XX, 9XX, 10XX, 16XX
+2204;ubm-nvidia-470;;nvidia-470;UBLinux module includes NVIDIA 470xx driver and utilities;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
+2204;;nvidia-470xx-dkms;nvidia-470;UBLinux module includes NVIDIA 470xx driver and utilities;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
+2204;ubm-nvidia-510;;nvidia-510;UBLinux module includes NVIDIA 510xx driver and utilities;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
+2204;;nvidia-510xx-dkms;nvidia-510;UBLinux module includes NVIDIA 510xx driver and utilities;Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
\ No newline at end of file