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 eb1d9e0..678ad21 100644 --- a/Makefile +++ b/Makefile @@ -21,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: @@ -88,6 +88,7 @@ uninstall: @$(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/emblems/com.ublinux.${PKGNAME}.vmware-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" @@ -120,6 +121,7 @@ install: check uninstall @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/" "com.ublinux.${PKGNAME}.nvidia-logo.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/" "com.ublinux.${PKGNAME}.intel-logo.svg" @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/" "com.ublinux.${PKGNAME}.amd-logo.svg" + @install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/emblems/" "com.ublinux.${PKGNAME}.vmware-logo.svg" @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" diff --git a/com.ublinux.ubl-settings-video.vmware-logo.svg b/com.ublinux.ubl-settings-video.vmware-logo.svg new file mode 100644 index 0000000..9118c90 --- /dev/null +++ b/com.ublinux.ubl-settings-video.vmware-logo.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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..65c9171 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)); } @@ -1379,6 +1514,10 @@ 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.amd-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } + else if (strstr(vendor,"VMware")){ + 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.vmware-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); + } else { gtk_widget_destroy(widgets->InformationCompanyLogoImage); } @@ -1494,8 +1633,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 +1647,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 +1663,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 +1681,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 +1693,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 +1819,14 @@ int main(int argc, char *argv[]) } if (getuid()!=0){ - system("/usr/bin/pkexec ubl-settings-video"); + char *args=""; + for (int i=0;i/dev/null"); gtk_init(&argc, &argv); GError error; yon_setup_config(load_drivers_local_command); @@ -1697,6 +1846,7 @@ int main(int argc, char *argv[]) -1); yon_monitor_view_update(); yon_ubl_setup_sockets(widgets.PlugBox,widgets.PlugLoadBox,widgets.PlugSaveBox,videoconfig.socket_id,videoconfig.load_socket_id,videoconfig.save_socket_id); + g_signal_connect(G_OBJECT(gtk_widget_get_parent(widgets.mainPlugBox)), "check-resize", G_CALLBACK(on_resized), NULL); gtk_main(); return 0; } diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 204ab5d..19d458f 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -15,7 +15,9 @@ #include #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 \"-\"" @@ -51,32 +53,32 @@ #define load_drivers_global_command "/usr/bin/ubconfig --default --source global get video FAILSAFENVIDIA FAILSAFEATI OPTIRUN PRIMUSRUN VGADRV_AUTO " -#define save_drivers_global_command "pkexec /usr/bin/ubconfig --target global --noexecute set video " +#define save_drivers_global_command "/usr/bin/ubconfig --target global --noexecute set video " -#define save_drivers_global_local_command "pkexec /usr/bin/ubconfig set video " +#define save_drivers_global_local_command "/usr/bin/ubconfig set video " #define load_drivers_local_command "/usr/bin/ubconfig --default --source system get video FAILSAFENVIDIA FAILSAFEATI OPTIRUN PRIMUSRUN VGADRV_AUTO " -#define save_drivers_local_command "pkexec /usr/bin/ubconfig --target system set video " +#define save_drivers_local_command "/usr/bin/ubconfig --target system set video " #define remove_drivers_global_command "/usr/bin/ubconfig --target system remove video " #define remove_drivers_local_command "/usr/bin/ubconfig --target system remove video " -#define install_proprietary_command "pkexec pacman --quiet --needed --noconfirm -Sy " +#define install_proprietary_command "pacman --quiet --needed --noconfirm -Sy " -#define delete_proprietary_command "pkexec pacman -R --noconfirm " +#define delete_proprietary_command "pacman -R --noconfirm " #define get_info_proprietary_command "pamac-manager --details=" #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 " pacman -Ssy ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}-nvidia-[a-zA-Z0-9-]{1,}\"" +#define get_proprietary_drivers_local_command " pacman -Qq |grep -E \"ubm-nvidia-\"" +#define get_proprietary_installed_command yon_char_unite(" 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.8"; +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.glade b/ubl-settings-video.glade index 20af17d..450bc79 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -11,7 +11,6 @@ False False 450 - 250 dialog-question-symbolic @@ -74,7 +73,8 @@ start 10 10 - You will be redirected to documentation website where documentation is translated and supported by community. + You will be redirected to documentation website where documentation is +translated and supported by community. True 0 - True + False True 1 @@ -103,6 +103,7 @@ False True + end 2 @@ -183,6 +184,7 @@ True False + True True @@ -195,7 +197,6 @@ - True False 32 dialog-question-symbolic @@ -693,15 +694,20 @@ True False + True + Switch system-shutdown-symbolic True False + True + Delete user-trash-symbolic False + True value-increase-symbolic @@ -712,6 +718,7 @@ True False + Configure open-menu-symbolic