parent
7b0a5f8eda
commit
909c698091
@ -0,0 +1,4 @@
|
|||||||
|
.vscode/
|
||||||
|
ubl-settings-video
|
||||||
|
ubl-settings-video.glade~
|
||||||
|
*ubl-settings-video.glade#
|
||||||
@ -0,0 +1,157 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
#SHELL := /bin/bash
|
||||||
|
MAKEFILE_FILEPATH := $(abspath $(lastword $(MAKEFILE_LIST)))
|
||||||
|
MAKEFILE_DIR := $(notdir $(patsubst %/,%,$(dir $(MAKEFILE_FILEPATH))))
|
||||||
|
MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH))
|
||||||
|
|
||||||
|
CMAKE_COMMAND = cmake
|
||||||
|
CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source
|
||||||
|
CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile
|
||||||
|
#CMAKE_SOURCE_DIR = ./source
|
||||||
|
#CMAKE_BUILD_DIR = ./compile
|
||||||
|
FILE_VERSION = VERSION.md
|
||||||
|
DEPENDS = /bin/cmake
|
||||||
|
PREFIX ?= /usr
|
||||||
|
PKGNAME = $(MAKEFILE_DIR)
|
||||||
|
#PKGNAME = ubl-settings-manager
|
||||||
|
|
||||||
|
default_target: all
|
||||||
|
|
||||||
|
.PHONY: all init depend debug prepare check build uninstall install clean up_ver help
|
||||||
|
|
||||||
|
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; \
|
||||||
|
gcc source/ubl-settings-video.c source/ubl-utils.c -o ubl-settings-video `pkg-config --cflags --libs gtk+-3.0` -g; \
|
||||||
|
echo "-- Build path: ${CMAKE_BUILD_DIR}"
|
||||||
|
|
||||||
|
depend:
|
||||||
|
@echo "Check depends ..."
|
||||||
|
@for FILE_DEPEND in $(DEPENDS); do \
|
||||||
|
if [ ! -f $${FILE_DEPEND} ]; then \
|
||||||
|
echo "ERROR: Depend '$${FILE_DEPEND}' not found !"; \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
echo "Check depends: OK"
|
||||||
|
# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||||
|
|
||||||
|
debug:
|
||||||
|
@echo "Debug ..."
|
||||||
|
if [ ! -d ${CMAKE_BUILD_DIR} ]; then \
|
||||||
|
$(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \
|
||||||
|
fi; \
|
||||||
|
echo "Debug: OK"
|
||||||
|
|
||||||
|
prepare:
|
||||||
|
@echo "Prepare ..."; \
|
||||||
|
if [ ! -d ${CMAKE_BUILD_DIR} ]; then \
|
||||||
|
$(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \
|
||||||
|
fi; \
|
||||||
|
echo "Prepare: OK"
|
||||||
|
|
||||||
|
check:
|
||||||
|
@echo "Check ..."; \
|
||||||
|
if [ -f ${CMAKE_BUILD_DIR}/${PKGNAME} ]; then \
|
||||||
|
echo "Check: OK"; \
|
||||||
|
else \
|
||||||
|
echo "Check: ${CMAKE_BUILD_DIR}/${PKGNAME} not found !"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
build: depend prepare
|
||||||
|
@echo "Build ..."; \
|
||||||
|
make --directory=${CMAKE_BUILD_DIR}; \
|
||||||
|
echo "Build: OK"
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
@echo "Uninstall ..."
|
||||||
|
@for FILE_PO in $(wildcard *.po); do \
|
||||||
|
LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \
|
||||||
|
FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \
|
||||||
|
PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \
|
||||||
|
$(RM) "$${PATH_FILE_MO}"; \
|
||||||
|
done
|
||||||
|
@for SIZE in 16x16 32x32 48x48 scalable; do \
|
||||||
|
$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \
|
||||||
|
$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/apps/com.ublinux.${PKGNAME}.png"; \
|
||||||
|
done
|
||||||
|
@for FILE_SVG in $(wildcard *.svg); do \
|
||||||
|
for SIZE in 16x16 32x32 48x48 scalable; do \
|
||||||
|
$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}/status/$${FILE_SVG%.*}".{svg,png,jpg}; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
@$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}"
|
||||||
|
@$(RM) "${DESTDIR}/etc/xdg/${PKGNAME}/${PKGNAME}.conf"
|
||||||
|
@$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop"
|
||||||
|
@$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg"
|
||||||
|
@$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}"
|
||||||
|
@if [ -z ${DESTDIR} ]; then \
|
||||||
|
[ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \
|
||||||
|
update-desktop-database --quiet &>/dev/null || true; \
|
||||||
|
[ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \
|
||||||
|
fi
|
||||||
|
@echo "Uninstall: OK"
|
||||||
|
|
||||||
|
install: check uninstall
|
||||||
|
@echo "Install ..."
|
||||||
|
@for FILE_PO in $(wildcard *.po); do \
|
||||||
|
LANG=$${FILE_PO##*_};LANG=$${LANG%.*}; \
|
||||||
|
install -dm755 "${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES"; \
|
||||||
|
FILE_MO=$${FILE_PO##*/}; FILE_MO="$${FILE_MO%_*.po}.mo"; \
|
||||||
|
PATH_FILE_MO="${DESTDIR}${PREFIX}/share/locale/$${LANG}/LC_MESSAGES/$${FILE_MO}"; \
|
||||||
|
echo "$${FILE_PO}"; \
|
||||||
|
msgfmt "$${FILE_PO}" -v -f -o "$${PATH_FILE_MO}"; \
|
||||||
|
done
|
||||||
|
@for SIZE in 16 32 48; do \
|
||||||
|
install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps"; \
|
||||||
|
rsvg-convert -w $${SIZE} -h $${SIZE} -f svg --keep-image-data "com.ublinux.${PKGNAME}.svg" -o "${DESTDIR}${PREFIX}/share/icons/hicolor/$${SIZE}x$${SIZE}/apps/com.ublinux.${PKGNAME}.svg"; \
|
||||||
|
done
|
||||||
|
@install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/devices/" "com.ublinux.${PKGNAME}.display.svg"
|
||||||
|
@install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}"
|
||||||
|
@install -dm755 "${DESTDIR}${PREFIX}/share/applications"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop"
|
||||||
|
@install -dm755 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images}
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}.glade"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/css/" "${PKGNAME}.css"
|
||||||
|
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}-banner.png"
|
||||||
|
@if [ -z ${DESTDIR} ]; then \
|
||||||
|
[ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \
|
||||||
|
update-desktop-database --quiet &>/dev/null || true; \
|
||||||
|
[ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \
|
||||||
|
fi
|
||||||
|
@echo "Install: OK"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo "Clean ..."
|
||||||
|
@$(RM) -rd ${CMAKE_BUILD_DIR}
|
||||||
|
@if [ -d ${CMAKE_BUILD_DIR} ]; then \
|
||||||
|
echo "Clean: error, compile directory exist ${CMAKE_BUILD_DIR}"; \
|
||||||
|
else \
|
||||||
|
echo "Clean: OK"; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
up_ver:
|
||||||
|
@CURRENT=$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2); \
|
||||||
|
MAJOR=$$(cut -d. -f1 <<< $${CURRENT}); \
|
||||||
|
MINOR=$$(cut -d. -f2 <<< $${CURRENT}); \
|
||||||
|
VER="$${MAJOR}.$$(($${MINOR}+1))"; \
|
||||||
|
sed "s/VERSION *[[:digit:]]*.*/VERSION $${VER}/" -i ${FILE_VERSION}; \
|
||||||
|
echo "Updated version to VERSION.md: $${CURRENT} to $${VER}"
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "The following are some of the valid targets for this Makefile:"; \
|
||||||
|
echo "... all (the default if no target is provided)"; \
|
||||||
|
echo "... init"; \
|
||||||
|
echo "... debug"; \
|
||||||
|
echo "... prepare"; \
|
||||||
|
echo "... compile"; \
|
||||||
|
echo "... install"; \
|
||||||
|
echo "... uninstall"; \
|
||||||
|
echo "... clean"; \
|
||||||
|
echo "... up_ver"
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 263 KiB |
@ -0,0 +1,31 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.7)
|
||||||
|
project(ubl-settings-video)
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
|
||||||
|
pkg_check_modules(GTK REQUIRED gtk+-3.0)
|
||||||
|
include_directories(${GTK_INCLUDE_DIRS})
|
||||||
|
link_directories(${GTK_LIBRARY_DIRS})
|
||||||
|
add_definitions(${GTK_CFLAGS_OTHER})
|
||||||
|
|
||||||
|
#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")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always \
|
||||||
|
-O2 -pipe -fno-plt -fexceptions \
|
||||||
|
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
|
||||||
|
-fstack-clash-protection -fcf-protection")
|
||||||
|
|
||||||
|
set(SOURCE_FILES
|
||||||
|
ubl-settings-video.c
|
||||||
|
ubl-settings-video.h
|
||||||
|
ubl-utils.c
|
||||||
|
ubl-utils.h)
|
||||||
|
|
||||||
|
set(LIBRARIES
|
||||||
|
${GTK_LIBRARIES}
|
||||||
|
pthread)
|
||||||
|
|
||||||
|
|
||||||
|
add_executable(ubl-settings-video ${SOURCE_FILES})
|
||||||
|
target_link_libraries(ubl-settings-video ${LIBRARIES})
|
||||||
|
install(TARGETS ubl-settings-video DESTINATION bin)
|
||||||
@ -0,0 +1,249 @@
|
|||||||
|
#include "ubl-settings-video.h"
|
||||||
|
#include "ubl-utils.h"
|
||||||
|
|
||||||
|
// #include <xfconf/xfconf.h>
|
||||||
|
|
||||||
|
config videoconfig;
|
||||||
|
|
||||||
|
void yon_on_plug_added(GtkSocket* self, gpointer user_data){
|
||||||
|
|
||||||
|
}
|
||||||
|
void yon_on_plug_removed(GtkSocket* self, gpointer user_data){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets){
|
||||||
|
int state=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaLabel,!state);
|
||||||
|
gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverCombo,!state);
|
||||||
|
gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverLabel,!state);
|
||||||
|
gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDCombo,!state);
|
||||||
|
gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDLabel,!state);
|
||||||
|
gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaCombo,!state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_manual_config_moniitors(GtkWidget *self, widgets_dict *widgets){
|
||||||
|
int state=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(widgets->mainMonitorVisualConfigurationBox,state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors){
|
||||||
|
gtk_widget_destroy(monitors->templateMonitorConfigurationWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_save_configuration(GtkWidget self, MonitorSettings *monitors){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings){
|
||||||
|
int monitors_n=yon_check_for_monitors();
|
||||||
|
MonitorSettings *monitors = NULL;
|
||||||
|
monitors=malloc(sizeof(MonitorSettings));
|
||||||
|
GtkBuilder *builder=gtk_builder_new_from_file(glade_path);
|
||||||
|
monitors->templateMonitorConfigurationWindow=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationWindow"));
|
||||||
|
monitors->templateMonitorConfigurationBox=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationBox"));
|
||||||
|
monitors->templateMonitorConfigurationMonitorLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationMonitorLabel"));
|
||||||
|
monitors->templateMonitorConfigurationResolutionLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationResolutionLabel"));
|
||||||
|
monitors->templateMonitorConfigurationResolutionCombo=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationResolutionCombo"));
|
||||||
|
monitors->templateMonitorConfigurationFrequencyLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationFrequencyLabel"));
|
||||||
|
monitors->templateMonitorConfigurationFrequencyCombo=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationFrequencyCombo"));
|
||||||
|
monitors->templateMonitorConfigurationRotationCombo=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationRotationCombo"));
|
||||||
|
monitors->templateMonitorConfigurationRotationLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationRotationLabel"));
|
||||||
|
monitors->templateMonitorConfigurationMainRadio=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationMainRadio"));
|
||||||
|
monitors->templateMonitorConfigurationParameterLineCheck=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationParameterLineCheck"));
|
||||||
|
monitors->templateMonitorConfigurationParameterLineEntry=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationParameterLineEntry"));
|
||||||
|
monitors->templateMonitorConfigurationDoNotSwitchOffLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationDoNotSwitchOffLabel"));
|
||||||
|
monitors->templateMonitorConfigurationDoNotSwitchOffCheck=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationDoNotSwitchOffCheck"));
|
||||||
|
monitors->templateMonitorConfigurationCancelButton=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationCancelButton"));
|
||||||
|
monitors->templateMonitorConfigurationSaveButton=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationSaveButton"));
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationCancelButton), "clicked", G_CALLBACK(on_closed_configuration), monitors);
|
||||||
|
g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationSaveButton), "clicked", G_CALLBACK(on_save_configuration), monitors);
|
||||||
|
// if (i!=0)
|
||||||
|
// gtk_radio_button_join_group(GTK_RADIO_BUTTON(monitors[i].templateMonitorConfigurationMainRadio),GTK_RADIO_BUTTON(monitors[i-1].templateMonitorConfigurationMainRadio));
|
||||||
|
|
||||||
|
gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationMonitorLabel),_("Monitor: "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationResolutionLabel),_("Resolution (px): "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationFrequencyLabel),_("Frequency (Hz): "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationRotationLabel),_("Rotation: "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationDoNotSwitchOffLabel),_("Do not switch display off"));
|
||||||
|
|
||||||
|
gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationMainRadio),_("Main monitor"));
|
||||||
|
gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationParameterLineCheck),_("through parameter line:"));
|
||||||
|
gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationDoNotSwitchOffCheck),_("DPMS off"));
|
||||||
|
gtk_widget_show(monitors->templateMonitorConfigurationWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
MonitorSettings *yon_setup_monitor_settings(){
|
||||||
|
int monitors_n=yon_check_for_monitors();
|
||||||
|
MonitorSettings *monitors = NULL;
|
||||||
|
monitors=malloc(sizeof(MonitorSettings)*monitors_n);
|
||||||
|
for (int i=0;i<monitors_n;i++){
|
||||||
|
GtkBuilder *builder=gtk_builder_new_from_file(glade_path);
|
||||||
|
monitors[i].templateMonitorscreenOverlay=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorscreenOverlay"));
|
||||||
|
monitors[i].templateMonitorInfoBox=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorInfoBox"));
|
||||||
|
monitors[i].templateMonitorInfoNameLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorInfoNameLabel"));
|
||||||
|
monitors[i].templateMonitorInfoResolutionLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorInfoResolutionLabel"));
|
||||||
|
monitors[i].templateMonitorInfoConfigureButton=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorInfoConfigureButton"));
|
||||||
|
|
||||||
|
gtk_overlay_add_overlay(GTK_OVERLAY(monitors[i].templateMonitorscreenOverlay),monitors[i].templateMonitorInfoBox);
|
||||||
|
g_signal_connect(G_OBJECT(monitors[i].templateMonitorInfoConfigureButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]);
|
||||||
|
}
|
||||||
|
return monitors;
|
||||||
|
}
|
||||||
|
|
||||||
|
int yon_check_for_monitors(){
|
||||||
|
GdkScreen *screen=gdk_screen_get_default();
|
||||||
|
int monitors=gdk_display_get_n_monitors(gdk_screen_get_display(screen));
|
||||||
|
return monitors;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_pack_monitors(MonitorSettings *monitors, int size){
|
||||||
|
dictionary *dict=yon_dictionary_create_with_data("0",monitors[0].templateMonitorConfigurationBox);
|
||||||
|
for (int i=1;i<size;i++){
|
||||||
|
dict=yon_dictionary_create_with_data_connected(dict,yon_char_from_int(i),monitors[i].templateMonitorConfigurationBox);
|
||||||
|
}
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_pack_overlays(MonitorSettings *monitors, int size){
|
||||||
|
dictionary *dict=yon_dictionary_create_with_data("0",monitors[0].templateMonitorscreenOverlay);
|
||||||
|
for (int i=1;i<size;i++){
|
||||||
|
dict=yon_dictionary_create_with_data_connected(dict,yon_char_from_int(i),monitors[i].templateMonitorscreenOverlay);
|
||||||
|
}
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
void yon_setup_widgets(widgets_dict *widgets){
|
||||||
|
widgets->builder=gtk_builder_new_from_file(glade_path);
|
||||||
|
widgets->MainWindow=yon_gtk_builder_get_widget(widgets->builder,"MainWindow");
|
||||||
|
widgets->headBox=yon_gtk_builder_get_widget(widgets->builder,"headBox");
|
||||||
|
widgets->headInfoLabel=yon_gtk_builder_get_widget(widgets->builder,"headInfoLabel");
|
||||||
|
widgets->mainPlugBox=yon_gtk_builder_get_widget(widgets->builder,"mainPlugBox");
|
||||||
|
widgets->mainErrorBox=yon_gtk_builder_get_widget(widgets->builder,"mainErrorBox");
|
||||||
|
widgets->mainHeadOverlay=yon_gtk_builder_get_widget(widgets->builder,"mainHeadOverlay");
|
||||||
|
widgets->mainHeadBackgroundImage=yon_gtk_builder_get_widget(widgets->builder,"mainHeadBackgroundImage");
|
||||||
|
widgets->mainDriverAutomaticallyChooseCheck=yon_gtk_builder_get_widget(widgets->builder,"mainDriverAutomaticallyChooseCheck");
|
||||||
|
widgets->mainDriverProprietaryDriverLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverProprietaryDriverLabel");
|
||||||
|
widgets->mainDriverFailsafeNvidiaLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFailsafeNvidiaLabel");
|
||||||
|
widgets->mainDriverFailsafeAMDLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFailsafeAMDLabel");
|
||||||
|
widgets->mainDriverProprietaryDriverCombo=yon_gtk_builder_get_widget(widgets->builder,"mainDriverProprietaryDriverCombo");
|
||||||
|
widgets->mainDriverFailsafeNvidiaCombo=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFailsafeNvidiaCombo");
|
||||||
|
widgets->mainDriverFailsafeAMDCombo=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFailsafeAMDCombo");
|
||||||
|
widgets->mainDriverFrameLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFrameLabel");
|
||||||
|
widgets->monitorConfigurationMethodLabel=yon_gtk_builder_get_widget(widgets->builder,"monitorConfigurationMethodLabel");
|
||||||
|
widgets->monitorConfigurationMethodCombo=yon_gtk_builder_get_widget(widgets->builder,"monitorConfigurationMethodCombo");
|
||||||
|
widgets->mainMonitorVisualConfigurationBox=yon_gtk_builder_get_widget(widgets->builder,"mainMonitorVisualConfigurationBox");
|
||||||
|
widgets->mainMonitorConfigurationBox=yon_gtk_builder_get_widget(widgets->builder,"mainMonitorConfigurationBox");
|
||||||
|
widgets->mainMonitorConfigurationFrameLabel=yon_gtk_builder_get_widget(widgets->builder,"mainMonitorConfigurationFrameLabel");
|
||||||
|
widgets->mainHybridGraphicsDiscreteLabel=yon_gtk_builder_get_widget(widgets->builder,"mainHybridGraphicsDiscreteLabel");
|
||||||
|
widgets->mainHybridGraphicsDiscreteCheck=yon_gtk_builder_get_widget(widgets->builder,"mainHybridGraphicsDiscreteCheck");
|
||||||
|
widgets->mainHybridGraphicsFrameLabel=yon_gtk_builder_get_widget(widgets->builder,"mainHybridGraphicsFrameLabel");
|
||||||
|
widgets->mainExtraLaunchOptirunCheck=yon_gtk_builder_get_widget(widgets->builder,"mainExtraLaunchOptirunCheck");
|
||||||
|
widgets->mainExtraLaunchPrismusunCheck=yon_gtk_builder_get_widget(widgets->builder,"mainExtraLaunchPrismusunCheck");
|
||||||
|
widgets->mainExtraFixGapLabel=yon_gtk_builder_get_widget(widgets->builder,"mainExtraFixGapLabel");
|
||||||
|
widgets->mainExtraLaunchOptirunEntry=yon_gtk_builder_get_widget(widgets->builder,"mainExtraLaunchOptirunEntry");
|
||||||
|
widgets->mainExtraLaunchPrismusunEntry=yon_gtk_builder_get_widget(widgets->builder,"mainExtraLaunchPrismusunEntry");
|
||||||
|
widgets->mainExtraFixGapLabelCombo=yon_gtk_builder_get_widget(widgets->builder,"mainExtraFixGapLabelCombo");
|
||||||
|
widgets->mainExtraLaunchThroughButton=yon_gtk_builder_get_widget(widgets->builder,"mainExtraLaunchThroughButton");
|
||||||
|
widgets->mainExtraFrameLabel=yon_gtk_builder_get_widget(widgets->builder,"mainExtraFrameLabel");
|
||||||
|
widgets->mainHeaderTitleLabel=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderTitleLabel");
|
||||||
|
widgets->mainHeaderLoadButton=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderLoadButton");
|
||||||
|
widgets->mainHeaderConfigLoadLabel=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderConfigLoadLabel");
|
||||||
|
widgets->mainHeaderSaveConfigurationLabel=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSaveConfigurationLabel");
|
||||||
|
widgets->mainHeaderSaveButton=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSaveButton");
|
||||||
|
widgets->mainHeaderSettingsButton=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSettingsButton");
|
||||||
|
widgets->mainHeaderLoadGlobalMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderLoadGlobalMenuItem");
|
||||||
|
widgets->mainHeaderLoadLocalMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderLoadLocalMenuItem");
|
||||||
|
widgets->mainHeaderSaveGlobalLocalMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSaveGlobalLocalMenuItem");
|
||||||
|
widgets->mainHeaderSaveGlobalMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSaveGlobalMenuItem");
|
||||||
|
widgets->mainHeaderSaveLocalMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSaveLocalMenuItem");
|
||||||
|
widgets->mainHeaderSettingsDocumentationMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSettingsDocumentationMenuItem");
|
||||||
|
widgets->mainHeaderSettingsAboutMenuItem=yon_gtk_builder_get_widget(widgets->builder,"mainHeaderSettingsAboutMenuItem");
|
||||||
|
widgets->mainStatusBox=yon_gtk_builder_get_widget(widgets->builder,"mainStatusBox");
|
||||||
|
widgets->mainStatusIcon=yon_gtk_builder_get_widget(widgets->builder,"mainStatusIcon");
|
||||||
|
widgets->mainStatusLabel=yon_gtk_builder_get_widget(widgets->builder,"mainStatusLabel");
|
||||||
|
widgets->templateMonitorConfigurationBox=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationBox");
|
||||||
|
widgets->templateMonitorConfigurationMonitorLabel=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationMonitorLabel");
|
||||||
|
widgets->templateMonitorConfigurationResolutionLabel=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationResolutionLabel");
|
||||||
|
widgets->templateMonitorConfigurationResolutionCombo=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationResolutionCombo");
|
||||||
|
widgets->templateMonitorConfigurationFrequencyLabel=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationFrequencyLabel");
|
||||||
|
widgets->templateMonitorConfigurationFrequencyCombo=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationFrequencyCombo");
|
||||||
|
widgets->templateMonitorConfigurationRotationLabel=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationRotationLabel");
|
||||||
|
widgets->templateMonitorConfigurationRotationCombo=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationRotationCombo");
|
||||||
|
widgets->templateMonitorConfigurationMainRadio=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationMainRadio");
|
||||||
|
widgets->templateMonitorConfigurationParameterLineCheck=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationParameterLineCheck");
|
||||||
|
widgets->templateMonitorConfigurationParameterLineEntry=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationParameterLineEntry");
|
||||||
|
widgets->templateMonitorConfigurationDoNotSwitchOffLabel=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationDoNotSwitchOffLabel");
|
||||||
|
widgets->templateMonitorConfigurationDoNotSwitchOffCheck=yon_gtk_builder_get_widget(widgets->builder,"templateMonitorConfigurationDoNotSwitchOffCheck");
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(widgets->mainDriverAutomaticallyChooseCheck), "toggled", G_CALLBACK(on_auto_choose_drivers), widgets);
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(widgets->MainWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
|
||||||
|
|
||||||
|
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->headInfoLabel),_("Video output configuration"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainDriverProprietaryDriverLabel),_("Proprietary driver: "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeNvidiaLabel),_("Failsafe driver nVidia: "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeAMDLabel),_("Failsafe driver AMD/ATI: "));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainDriverFrameLabel),_("Driver"));
|
||||||
|
// gtk_label_set_text(GTK_LABEL(widgets->monitorConfigurationMethodLabel),_("Configuration method"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainMonitorConfigurationFrameLabel),_("Monitor configuration"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainHybridGraphicsFrameLabel),_("Hybrid graphics"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainExtraFixGapLabel),_("Fix frame gap (nVidia)"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainExtraFrameLabel),_("Extra"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainHeaderTitleLabel),_("UBlinux Video Configuration"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainHeaderConfigLoadLabel),_("Load"));
|
||||||
|
gtk_label_set_text(GTK_LABEL(widgets->mainHeaderSaveConfigurationLabel),_("Save"));
|
||||||
|
|
||||||
|
gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck),_("On"));
|
||||||
|
gtk_button_set_label(GTK_BUTTON(widgets->mainDriverAutomaticallyChooseCheck),_("Automatically choose and use driver"));
|
||||||
|
gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchOptirunCheck),_("Launch programms through optirun (nVidia): "));
|
||||||
|
gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchPrismusunCheck),_("Launch programs through primusun (nVidia): "));
|
||||||
|
gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck),_("discrete video only (AMD/ATI)"));
|
||||||
|
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadGlobalMenuItem),_("Load from global configuration"));
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadLocalMenuItem),_("Load from local configuration"));
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalLocalMenuItem),_("Save to global an local configuration"));
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalMenuItem),_("Save to global configuration"));
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveLocalMenuItem),_("Save to local configuration"));
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsDocumentationMenuItem),_("Documentation"));
|
||||||
|
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem),_("About"));
|
||||||
|
|
||||||
|
// gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchThroughButton),_("Change"));
|
||||||
|
|
||||||
|
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->mainHeadOverlay),widgets->headBox);
|
||||||
|
|
||||||
|
gtk_image_set_from_file(GTK_IMAGE(widgets->mainHeadBackgroundImage),banner_path);
|
||||||
|
MonitorSettings *monitors = yon_setup_monitor_settings();
|
||||||
|
widgets->monitors=yon_dictionary_pack_monitors(monitors,yon_check_for_monitors());
|
||||||
|
widgets->overlays=yon_dictionary_pack_overlays(monitors,yon_check_for_monitors());
|
||||||
|
yon_dictionary_gtk_pack_start_multiple_widgets(widgets->overlays,widgets->mainMonitorVisualConfigurationBox,0,0,0);
|
||||||
|
// yon_dictionary_gtk_pack_start_multiple_widgets(widgets->monitors,widgets->mainMonitorConfigurationBox,0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]){
|
||||||
|
|
||||||
|
local=setlocale(LC_ALL, "");
|
||||||
|
textdomain (LocaleName);
|
||||||
|
gtk_init(&argc, &argv);
|
||||||
|
|
||||||
|
GError error;
|
||||||
|
// xfconf_init (&error);
|
||||||
|
// display_channel = xfconf_channel_new ("displays");
|
||||||
|
|
||||||
|
|
||||||
|
widgets_dict widgets;
|
||||||
|
yon_setup_widgets(&widgets);
|
||||||
|
gtk_widget_show(widgets.MainWindow);
|
||||||
|
|
||||||
|
GtkCssProvider *css=gtk_css_provider_new();
|
||||||
|
gtk_css_provider_load_from_path(css,CssPath,NULL);
|
||||||
|
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
|
||||||
|
GTK_STYLE_PROVIDER(css),
|
||||||
|
-1);
|
||||||
|
gtk_main();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <gtk/gtkx.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
#include "ubl-utils.h"
|
||||||
|
#ifndef UBL_SETINGS_VIDEO_H
|
||||||
|
#define UBL_SETINGS_VIDEO_H
|
||||||
|
|
||||||
|
#define banner_path "/usr/share/ubl-settings-video/ui/ubl-settings-video-banner.png"
|
||||||
|
|
||||||
|
#define glade_path "/usr/share/ubl-settings-video/ui/ubl-settings-video.glade"
|
||||||
|
#define LocalePath "/usr/share/locale"
|
||||||
|
#define LocaleName "ubl-settings-video"
|
||||||
|
#define CssPath "/usr/share/ubl-settings-video/css/ubl-settings-video.css"
|
||||||
|
#define StatusLoadGlobalFailed _("Failed to load global configuration")
|
||||||
|
#define StatusLoadLocalFailed _("Failed to load local configuration")
|
||||||
|
|
||||||
|
#define StatusSaveGlobalFailed _("Saving to global configuration Succeeded")
|
||||||
|
#define StatusSaveLocalFailed _("Saving to local configuration Succeeded")
|
||||||
|
|
||||||
|
char *local;
|
||||||
|
|
||||||
|
typedef char* string;
|
||||||
|
|
||||||
|
string version_application = "";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define _(String) gettext(String)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
dictionary *videoconfig;
|
||||||
|
} config;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
dictionary *monitors;
|
||||||
|
dictionary *overlays;
|
||||||
|
GtkBuilder *builder;
|
||||||
|
GtkWidget *MainWindow;
|
||||||
|
GtkWidget *headBox;
|
||||||
|
GtkWidget *headInfoLabel;
|
||||||
|
GtkWidget *mainPlugBox;
|
||||||
|
GtkWidget *mainErrorBox;
|
||||||
|
GtkWidget *mainHeadOverlay;
|
||||||
|
GtkWidget *mainHeadBackgroundImage;
|
||||||
|
GtkWidget *mainDriverAutomaticallyChooseCheck;
|
||||||
|
GtkWidget *mainDriverProprietaryDriverLabel;
|
||||||
|
GtkWidget *mainDriverFailsafeNvidiaLabel;
|
||||||
|
GtkWidget *mainDriverFailsafeAMDLabel;
|
||||||
|
GtkWidget *mainDriverProprietaryDriverCombo;
|
||||||
|
GtkWidget *mainDriverFailsafeNvidiaCombo;
|
||||||
|
GtkWidget *mainDriverFailsafeAMDCombo;
|
||||||
|
GtkWidget *mainDriverFrameLabel;
|
||||||
|
GtkWidget *monitorConfigurationMethodLabel;
|
||||||
|
GtkWidget *monitorConfigurationMethodCombo;
|
||||||
|
GtkWidget *mainMonitorVisualConfigurationBox;
|
||||||
|
GtkWidget *mainMonitorConfigurationBox;
|
||||||
|
GtkWidget *mainMonitorConfigurationFrameLabel;
|
||||||
|
GtkWidget *mainHybridGraphicsDiscreteLabel;
|
||||||
|
GtkWidget *mainHybridGraphicsDiscreteCheck;
|
||||||
|
GtkWidget *mainHybridGraphicsFrameLabel;
|
||||||
|
GtkWidget *mainExtraLaunchOptirunCheck;
|
||||||
|
GtkWidget *mainExtraLaunchPrismusunCheck;
|
||||||
|
GtkWidget *mainExtraFixGapLabel;
|
||||||
|
GtkWidget *mainExtraLaunchOptirunEntry;
|
||||||
|
GtkWidget *mainExtraLaunchPrismusunEntry;
|
||||||
|
GtkWidget *mainExtraLaunchThroughEntry;
|
||||||
|
GtkWidget *mainExtraFixGapLabelCombo;
|
||||||
|
GtkWidget *mainExtraLaunchThroughButton;
|
||||||
|
GtkWidget *mainExtraFrameLabel;
|
||||||
|
GtkWidget *mainHeaderTitleLabel;
|
||||||
|
GtkWidget *mainHeaderLoadButton;
|
||||||
|
GtkWidget *mainHeaderConfigLoadLabel;
|
||||||
|
GtkWidget *mainHeaderSaveConfigurationLabel;
|
||||||
|
GtkWidget *mainHeaderSaveButton;
|
||||||
|
GtkWidget *mainHeaderSettingsButton;
|
||||||
|
GtkWidget *mainHeaderLoadGlobalMenuItem;
|
||||||
|
GtkWidget *mainHeaderLoadLocalMenuItem;
|
||||||
|
GtkWidget *mainHeaderSaveGlobalLocalMenuItem;
|
||||||
|
GtkWidget *mainHeaderSaveGlobalMenuItem;
|
||||||
|
GtkWidget *mainHeaderSaveLocalMenuItem;
|
||||||
|
GtkWidget *mainHeaderSettingsDocumentationMenuItem;
|
||||||
|
GtkWidget *mainHeaderSettingsAboutMenuItem;
|
||||||
|
GtkWidget *mainStatusBox;
|
||||||
|
GtkWidget *mainStatusIcon;
|
||||||
|
GtkWidget *mainStatusLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationBox;
|
||||||
|
GtkWidget *templateMonitorConfigurationMonitorLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationResolutionLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationResolutionCombo;
|
||||||
|
GtkWidget *templateMonitorConfigurationFrequencyLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationFrequencyCombo;
|
||||||
|
GtkWidget *templateMonitorConfigurationRotationLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationRotationCombo;
|
||||||
|
GtkWidget *templateMonitorConfigurationMainRadio;
|
||||||
|
GtkWidget *templateMonitorConfigurationParameterLineCheck;
|
||||||
|
GtkWidget *templateMonitorConfigurationParameterLineEntry;
|
||||||
|
GtkWidget *templateMonitorConfigurationDoNotSwitchOffLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck;
|
||||||
|
} widgets_dict;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GtkWidget *templateMonitorConfigurationWindow;
|
||||||
|
GtkWidget *templateMonitorConfigurationBox;
|
||||||
|
GtkWidget *templateMonitorConfigurationMonitorLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationResolutionLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationResolutionCombo;
|
||||||
|
GtkWidget *templateMonitorConfigurationFrequencyLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationFrequencyCombo;
|
||||||
|
GtkWidget *templateMonitorConfigurationRotationCombo;
|
||||||
|
GtkWidget *templateMonitorConfigurationRotationLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationMainRadio;
|
||||||
|
GtkWidget *templateMonitorConfigurationParameterLineCheck;
|
||||||
|
GtkWidget *templateMonitorConfigurationParameterLineEntry;
|
||||||
|
GtkWidget *templateMonitorConfigurationDoNotSwitchOffLabel;
|
||||||
|
GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck;
|
||||||
|
GtkWidget *templateMonitorConfigurationCancelButton;
|
||||||
|
GtkWidget *templateMonitorConfigurationSaveButton;
|
||||||
|
|
||||||
|
GtkWidget *templateMonitorscreenOverlay;
|
||||||
|
GtkWidget *templateMonitorInfoBox;
|
||||||
|
GtkWidget *templateMonitorInfoNameLabel;
|
||||||
|
GtkWidget *templateMonitorInfoResolutionLabel;
|
||||||
|
GtkWidget *templateMonitorInfoConfigureButton;
|
||||||
|
} MonitorSettings;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int yon_check_for_monitors();
|
||||||
|
MonitorSettings *yon_setup_monitor_settings();
|
||||||
|
dictionary *yon_dictionary_pack_monitors(MonitorSettings *monitors, int size);
|
||||||
|
dictionary *yon_dictionary_pack_overlays(MonitorSettings *monitors, int size);
|
||||||
|
void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors);
|
||||||
|
void on_save_configuration(GtkWidget self, MonitorSettings *monitors);
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -0,0 +1,474 @@
|
|||||||
|
#include "ubl-utils.h"
|
||||||
|
#ifndef UBL_UTILS
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DICTIONARY_ACTION_WIDGETS_TYPE,
|
||||||
|
DICTIONARY_IVGRAPHICALS_TYPE,
|
||||||
|
DICTIONARY_OTHER_TYPE
|
||||||
|
|
||||||
|
} DICT_TYPE;
|
||||||
|
|
||||||
|
typedef struct dictionary {
|
||||||
|
char *key;
|
||||||
|
void *data;
|
||||||
|
struct dictionary *next;
|
||||||
|
struct dictionary *prev;
|
||||||
|
struct dictionary *first;
|
||||||
|
DICT_TYPE data_type;
|
||||||
|
} dictionary;
|
||||||
|
|
||||||
|
typedef struct apps{
|
||||||
|
char *Name;
|
||||||
|
int Type;
|
||||||
|
char *Categories;
|
||||||
|
char *Exec;
|
||||||
|
char *Icon;
|
||||||
|
int Pluggable;
|
||||||
|
int DualPluggable;
|
||||||
|
} apps;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *command;
|
||||||
|
int *exitcode;
|
||||||
|
} thread_output;
|
||||||
|
|
||||||
|
#ifdef __GTK_H__
|
||||||
|
typedef struct IVGrapgicals{
|
||||||
|
char *sectionName;
|
||||||
|
char *categories;
|
||||||
|
GtkListStore *LV;
|
||||||
|
GtkWidget *Box;
|
||||||
|
GtkWidget *IV;
|
||||||
|
GtkWidget *label;
|
||||||
|
GtkWidget *sep;
|
||||||
|
GtkCellRendererPixbuf *iconRender;
|
||||||
|
} IVGraphicals;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//dictionary functions
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_create_empty(){
|
||||||
|
dictionary *dict=malloc(sizeof(dictionary));
|
||||||
|
dict->data=NULL;
|
||||||
|
dict->key=NULL;
|
||||||
|
dict->next=NULL;
|
||||||
|
dict->prev=NULL;
|
||||||
|
dict->first=dict;
|
||||||
|
dict->data_type=DICTIONARY_OTHER_TYPE;
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
void yon_dictionary_switch_to_last(dictionary **dict){
|
||||||
|
if ((*dict)->next!=NULL)
|
||||||
|
for ((*dict)=(*dict)->first;(*dict)->next!=NULL;(*dict)=(*dict)->next){}
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary * yon_dictionary_create_conneced(dictionary *targetdict){
|
||||||
|
yon_dictionary_switch_to_last(&targetdict);
|
||||||
|
targetdict->next=yon_dictionary_create_empty();
|
||||||
|
targetdict->next->prev=targetdict;
|
||||||
|
targetdict->next->first=targetdict->first;
|
||||||
|
targetdict->next->data_type=DICTIONARY_OTHER_TYPE;
|
||||||
|
return targetdict->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_get_last(dictionary *dict){
|
||||||
|
dictionary *dct=NULL;
|
||||||
|
for (dct=dict->first;dct->next!=NULL;dct=dct->next){}
|
||||||
|
return dct;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_switch_places(dictionary *dict,int aim){
|
||||||
|
if (aim<0){
|
||||||
|
if (dict->prev){
|
||||||
|
if (dict->prev->prev){
|
||||||
|
dictionary *next = dict->next,*prev=dict->prev,*preprev=prev->prev;
|
||||||
|
if (next){
|
||||||
|
preprev->next=dict;
|
||||||
|
dict->prev=preprev;
|
||||||
|
dict->next=prev;
|
||||||
|
prev->prev=dict;
|
||||||
|
prev->next=next;
|
||||||
|
next->prev=prev;
|
||||||
|
} else {
|
||||||
|
preprev->next=dict;
|
||||||
|
dict->prev=preprev;
|
||||||
|
dict->next=prev;
|
||||||
|
prev->prev=dict;
|
||||||
|
prev->next=NULL;
|
||||||
|
}
|
||||||
|
return prev;
|
||||||
|
} else {
|
||||||
|
dictionary *next = dict->next,*prev=dict->prev;
|
||||||
|
if (next){
|
||||||
|
yon_dictionary_make_first(dict);
|
||||||
|
dict->prev=NULL;
|
||||||
|
dict->next=prev;
|
||||||
|
prev->prev=dict;
|
||||||
|
prev->next=next;
|
||||||
|
next->prev=prev;
|
||||||
|
} else {
|
||||||
|
dict->prev=NULL;
|
||||||
|
dict->next=prev;
|
||||||
|
prev->prev=dict;
|
||||||
|
prev->next=NULL;
|
||||||
|
}
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (aim>0){
|
||||||
|
if (dict->next){
|
||||||
|
if (dict->next->next){
|
||||||
|
dictionary *next = dict->next,*prev=dict->prev,*afnext=next->next;
|
||||||
|
if (prev){
|
||||||
|
prev->next=next;
|
||||||
|
next->prev=prev;
|
||||||
|
next->next=dict;
|
||||||
|
dict->prev=next;
|
||||||
|
dict->next=afnext;
|
||||||
|
afnext->prev=dict;
|
||||||
|
} else {
|
||||||
|
yon_dictionary_make_first(next);
|
||||||
|
next->prev=NULL;
|
||||||
|
next->next=dict;
|
||||||
|
dict->prev=next;
|
||||||
|
dict->next=afnext;
|
||||||
|
afnext->prev=dict;
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
} else {
|
||||||
|
dictionary *next = dict->next,*prev=dict->prev;
|
||||||
|
if (prev){
|
||||||
|
prev->next=next;
|
||||||
|
next->prev=prev;
|
||||||
|
next->next=dict;
|
||||||
|
dict->prev=next;
|
||||||
|
dict->next=NULL;
|
||||||
|
} else {
|
||||||
|
next->prev=NULL;
|
||||||
|
next->next=dict;
|
||||||
|
dict->prev=next;
|
||||||
|
dict->next=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void yon_dictionary_make_first(dictionary *dict){
|
||||||
|
for (dictionary *dct=dict->first;dct!=NULL;dct=dct->next){
|
||||||
|
dct->first=dict;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void yon_dictionary_make_nth(dictionary *dict, int nth){
|
||||||
|
dictionary *dct=dict->first;
|
||||||
|
for (int i=0;i<nth;i++){if (dct==NULL) return; else dct=dct->next;}
|
||||||
|
yon_dictionary_rip(dict);
|
||||||
|
dictionary *prev=dct->prev;
|
||||||
|
prev->next=dict;
|
||||||
|
dict->prev=prev;
|
||||||
|
dict->next=dct;
|
||||||
|
dct->prev=dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_create_with_data(char *key, void *data){
|
||||||
|
dictionary *dct=yon_dictionary_create_empty();
|
||||||
|
dct->key=key;
|
||||||
|
dct->data=data;
|
||||||
|
dct->data_type=DICTIONARY_OTHER_TYPE;
|
||||||
|
return dct;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data){
|
||||||
|
dictionary *dct=yon_dictionary_create_conneced(dict);
|
||||||
|
dct->key=key;
|
||||||
|
dct->data=data;
|
||||||
|
dct->data_type=DICTIONARY_OTHER_TYPE;
|
||||||
|
return dct;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect){
|
||||||
|
dictionary *dict=yon_dictionary_get_last(old);
|
||||||
|
dict->next=toconnect;
|
||||||
|
toconnect->prev=dict;
|
||||||
|
toconnect->first=dict->first;
|
||||||
|
return toconnect;
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_find(dictionary **dict, char *key){
|
||||||
|
dictionary *dct=*dict;
|
||||||
|
for (dictionary *pointer=dct->first;pointer!=NULL;pointer=pointer->next){
|
||||||
|
if (strcmp(pointer->key,key)==0){
|
||||||
|
*dict=pointer;
|
||||||
|
return pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_rip(dictionary *dict){
|
||||||
|
if (!dict->next){
|
||||||
|
dictionary *prev=dict->prev;
|
||||||
|
if (prev){
|
||||||
|
prev->next=NULL;
|
||||||
|
return prev;
|
||||||
|
} else return dict;
|
||||||
|
}
|
||||||
|
else if (!dict->prev){
|
||||||
|
dictionary *next=dict->next;
|
||||||
|
if (next){
|
||||||
|
yon_dictionary_make_first(next);
|
||||||
|
next->prev=NULL;
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
else return dict;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dictionary *next=dict->next, *prev=dict->prev;
|
||||||
|
next->prev=prev;
|
||||||
|
prev->next=next;
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_get_nth(dictionary *dict, int place){
|
||||||
|
for (int i=0;i<place; i++)
|
||||||
|
dict=dict->next;
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
|
||||||
|
//char functions
|
||||||
|
|
||||||
|
char *yon_char_get_augumented(char *source, char *append){
|
||||||
|
int size=strlen(source)+strlen(append)+1;
|
||||||
|
char *final=malloc(size);
|
||||||
|
memset(final,0,size);
|
||||||
|
sprintf(final,"%s%s",source,append);
|
||||||
|
return final;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *yon_char_new(char *chr){
|
||||||
|
char *newchar=malloc(strlen(chr)+1);
|
||||||
|
memset(newchar,0,strlen(chr)+1);
|
||||||
|
memcpy(newchar,chr,strlen(chr));
|
||||||
|
return newchar;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *yon_cut(char *source, int size, int startpos){
|
||||||
|
char *cut=NULL;
|
||||||
|
cut=malloc(size+1);
|
||||||
|
memset(cut,0,size+1);
|
||||||
|
memcpy(cut,source+startpos,size);
|
||||||
|
return cut;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *yon_char_divide(char *source, int dividepos){
|
||||||
|
char *cut=malloc(dividepos+1);
|
||||||
|
memset(cut,0,dividepos+1);
|
||||||
|
memcpy(cut,source,dividepos);
|
||||||
|
char *left=malloc(strlen(source)-strlen(cut));
|
||||||
|
memset(left,0,strlen(source)-strlen(cut));
|
||||||
|
memcpy(left,source+dividepos+1,(strlen(source)-dividepos));
|
||||||
|
memset(source,0,strlen(source));
|
||||||
|
memcpy(source,left,strlen(left));
|
||||||
|
return cut;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *yon_char_divide_search(char *source, char* dividepos, int delete_divider){
|
||||||
|
char *cut=strstr(source,dividepos);
|
||||||
|
int leng=strlen(source)-strlen(cut);
|
||||||
|
cut=yon_char_divide(source,leng);
|
||||||
|
return cut;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *yon_char_from_int(int int_to_convert){
|
||||||
|
int i=1;
|
||||||
|
float convert_check=(float)int_to_convert;
|
||||||
|
for (i=1;convert_check>10;i++){
|
||||||
|
convert_check=convert_check/10;
|
||||||
|
}
|
||||||
|
char *ch=malloc(i*sizeof(char)+1);
|
||||||
|
sprintf(ch,"%d",int_to_convert);
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//parsing functions
|
||||||
|
|
||||||
|
apps *yon_apps_scan_and_parse_desktops(int *sizef){
|
||||||
|
int size=0;
|
||||||
|
struct apps *applist;
|
||||||
|
{
|
||||||
|
DIR *directory=opendir(DesktopPath);
|
||||||
|
struct dirent *de;
|
||||||
|
while ((de = readdir(directory)))
|
||||||
|
{
|
||||||
|
FILE *file;
|
||||||
|
char *path=yon_char_get_augumented(DesktopPath,de->d_name);
|
||||||
|
file=fopen(path,"r");
|
||||||
|
if (strlen(de->d_name)>9)
|
||||||
|
{
|
||||||
|
char *extension=strstr(path,".");
|
||||||
|
if (extension!=NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(extension,".desktop")==0)
|
||||||
|
{
|
||||||
|
apps tempapp;
|
||||||
|
GKeyFile *gfile=g_key_file_new();
|
||||||
|
g_key_file_load_from_file(gfile,path,G_KEY_FILE_KEEP_TRANSLATIONS,NULL);
|
||||||
|
char *Type=g_key_file_get_string(gfile,"Desktop Entry", "Type",NULL);
|
||||||
|
if (strcmp(Type,"Application")==0) tempapp.Type=1; else if (strcmp(Type,"pyApplication")==0) tempapp.Type=2; else continue;
|
||||||
|
tempapp.Name=g_key_file_get_locale_string(gfile,"Desktop Entry","Name",setlocale(LC_ALL,NULL),NULL);
|
||||||
|
if (tempapp.Name==NULL) continue;
|
||||||
|
tempapp.Categories=g_key_file_get_string(gfile,"Desktop Entry", "Categories",NULL);
|
||||||
|
if (tempapp.Categories==NULL) continue;
|
||||||
|
tempapp.Exec=g_key_file_get_string(gfile,"Desktop Entry", "Exec",NULL);
|
||||||
|
if (tempapp.Exec==NULL) continue;
|
||||||
|
tempapp.Icon=g_key_file_get_string(gfile,"Desktop Entry", "Icon",NULL);
|
||||||
|
if (tempapp.Icon==NULL) continue;
|
||||||
|
tempapp.Pluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "Pluggable",NULL);
|
||||||
|
if (!tempapp.Pluggable) tempapp.Pluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "X-XfcePluggable",NULL);
|
||||||
|
if (tempapp.Pluggable) tempapp.DualPluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "X-UBLPluggable",NULL);
|
||||||
|
if (g_key_file_get_boolean(gfile,"Desktop Entry", "X-UBL-SettingsManager-Hidden",NULL)==0)
|
||||||
|
if (size==0){
|
||||||
|
applist=(apps*)malloc(size+1*sizeof(apps));
|
||||||
|
applist[0].Name=yon_char_new(tempapp.Name);
|
||||||
|
applist[0].Categories=yon_char_new(tempapp.Categories);
|
||||||
|
applist[0].Exec=yon_char_new(tempapp.Exec);
|
||||||
|
applist[0].Icon=yon_char_new(tempapp.Icon);
|
||||||
|
applist[0].Type=tempapp.Type;
|
||||||
|
applist[0].Pluggable=tempapp.Pluggable;
|
||||||
|
applist[0].DualPluggable=tempapp.DualPluggable;
|
||||||
|
size++;
|
||||||
|
} else {
|
||||||
|
applist=(apps*)realloc(applist,(size+1)*sizeof(apps));
|
||||||
|
applist[size].Name=yon_char_new(tempapp.Name);
|
||||||
|
applist[size].Categories=yon_char_new(tempapp.Categories);
|
||||||
|
applist[size].Exec=yon_char_new(tempapp.Exec);
|
||||||
|
applist[size].Icon=yon_char_new(tempapp.Icon);
|
||||||
|
applist[size].Pluggable=tempapp.Pluggable;
|
||||||
|
applist[size].DualPluggable=tempapp.DualPluggable;
|
||||||
|
applist[size].Type=tempapp.Type;
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*sizef=size;
|
||||||
|
return applist;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void yon_apps_sort(apps *applist,int size){
|
||||||
|
apps tmp;
|
||||||
|
if (size>2)
|
||||||
|
{
|
||||||
|
for (int i=1;i<size;i++)
|
||||||
|
{
|
||||||
|
for (int j=1;j<size;j++)
|
||||||
|
{
|
||||||
|
if (strcmp(applist[j].Name,applist[j-1].Name)<0){
|
||||||
|
tmp=applist[j];
|
||||||
|
applist[j]=applist[j-1];
|
||||||
|
applist[j-1]=tmp;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
apps *yon_apps_get_by_name(apps *applist,char *name, int size){
|
||||||
|
for (int i=0;i<size;i++){
|
||||||
|
if (strcmp(applist[i].Name,name)==0) return &applist[i];
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//terminal-using functions
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int yon_launch_app(char *name){
|
||||||
|
char *path=name;
|
||||||
|
thread_output *thread=malloc(sizeof(thread_output));
|
||||||
|
thread->command=path;
|
||||||
|
thread->exitcode=malloc(sizeof(int));
|
||||||
|
pthread_t thread_id;
|
||||||
|
pthread_create(&thread_id, NULL, (void*)yon_launch, thread);
|
||||||
|
return *thread->exitcode;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int yon_launch_app_with_arguments(char *name, char *args){
|
||||||
|
char *path=yon_char_get_augumented("/usr/bin/",name);
|
||||||
|
path=yon_char_get_augumented(path," ");
|
||||||
|
path=yon_char_get_augumented(path,args);
|
||||||
|
pthread_t thread_id;
|
||||||
|
thread_output *thread=malloc(sizeof(thread_output));
|
||||||
|
thread->command=path;
|
||||||
|
thread->exitcode=malloc(sizeof(int));
|
||||||
|
pthread_create(&thread_id, NULL, (void*)yon_launch, thread);
|
||||||
|
return *thread->exitcode;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int yon_launch(thread_output *thread){
|
||||||
|
int a=0;
|
||||||
|
a=system(thread->command);
|
||||||
|
*thread->exitcode=a;
|
||||||
|
return *thread->exitcode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Gtk functions
|
||||||
|
|
||||||
|
#ifdef __GTK_H__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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_icon_view_hide_empty(dictionary *icon_view_segment){
|
||||||
|
if (icon_view_segment->data_type==DICTIONARY_IVGRAPHICALS_TYPE){
|
||||||
|
for (dictionary *icvd=icon_view_segment->first;icvd!=NULL;icvd=icvd->next){
|
||||||
|
IVGraphicals *icv=icvd->data;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(icv->LV),&iter)==0){
|
||||||
|
gtk_widget_hide(icv->Box);
|
||||||
|
// gtk_widget_hide(GTK_WIDGET(icv->sep));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding){
|
||||||
|
for (dictionary *dct=dict->first; dct!=NULL;dct=dct->next){
|
||||||
|
gtk_box_pack_start(GTK_BOX(destination),(GtkWidget*)dct->data,expand,fill,padding);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding){
|
||||||
|
for (dictionary *dct=dict->first; dct!=NULL;dct=dct->next){
|
||||||
|
gtk_box_pack_end(GTK_BOX(destination),(GtkWidget*)dct->data,expand,fill,padding);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -0,0 +1,141 @@
|
|||||||
|
#ifndef UBL_UTILS
|
||||||
|
#define UBL_UTILS
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <gtk/gtkx.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define DesktopPath "/usr/share/applications"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
DICTIONARY_ACTION_WIDGETS_TYPE,
|
||||||
|
DICTIONARY_IVGRAPHICALS_TYPE,
|
||||||
|
DICTIONARY_OTHER_TYPE
|
||||||
|
|
||||||
|
} DICT_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *command;
|
||||||
|
int *exitcode;
|
||||||
|
} thread_output;
|
||||||
|
|
||||||
|
typedef struct dictionary {
|
||||||
|
char *key;
|
||||||
|
void *data;
|
||||||
|
struct dictionary *next;
|
||||||
|
struct dictionary *prev;
|
||||||
|
struct dictionary *first;
|
||||||
|
DICT_TYPE data_type;
|
||||||
|
} dictionary;
|
||||||
|
|
||||||
|
typedef struct apps{
|
||||||
|
char *Name;
|
||||||
|
int Type;
|
||||||
|
char *Categories;
|
||||||
|
char *Exec;
|
||||||
|
char *Icon;
|
||||||
|
int Pluggable;
|
||||||
|
int DualPluggable;
|
||||||
|
} apps;
|
||||||
|
|
||||||
|
|
||||||
|
//dictionary functions
|
||||||
|
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_get_last(dictionary *dict);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_switch_places(dictionary *dict,int aim);
|
||||||
|
|
||||||
|
void yon_dictionary_make_first(dictionary *dict);
|
||||||
|
|
||||||
|
void yon_dictionary_make_nth(dictionary *dict, int nth);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_create_with_data(char *key, void *data);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_find(dictionary **dict, char *key);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_rip(dictionary *dict);
|
||||||
|
|
||||||
|
dictionary *yon_dictionary_get_nth(dictionary *dict, int place);
|
||||||
|
|
||||||
|
//char functions
|
||||||
|
|
||||||
|
char *yon_char_get_augumented(char *source, char *append);
|
||||||
|
|
||||||
|
char *yon_char_new(char *chr);
|
||||||
|
|
||||||
|
char *yon_cut(char *source, int size, int startpos);
|
||||||
|
|
||||||
|
char *yon_char_divide(char *source, int dividepos);
|
||||||
|
|
||||||
|
char *yon_char_divide_search(char *source, char* dividepos, int delete_divider);
|
||||||
|
|
||||||
|
char *yon_char_from_int(int int_to_convert);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//parsing functions
|
||||||
|
|
||||||
|
apps *yon_apps_scan_and_parse_desktops(int *sizef);
|
||||||
|
|
||||||
|
|
||||||
|
void yon_apps_sort(apps *applist,int size);
|
||||||
|
|
||||||
|
|
||||||
|
apps *yon_apps_get_by_name(apps *applist,char *name, int size);
|
||||||
|
|
||||||
|
|
||||||
|
//terminal-using functions
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int yon_launch_app(char *name);
|
||||||
|
|
||||||
|
|
||||||
|
int yon_launch_app_with_arguments(char *name, char *args);
|
||||||
|
|
||||||
|
|
||||||
|
int yon_launch(thread_output *thread);
|
||||||
|
|
||||||
|
//Gtk functions
|
||||||
|
|
||||||
|
#ifdef __GTK_H__
|
||||||
|
|
||||||
|
#define yon_gtk_builder_get_widget(obj,obj2) GTK_WIDGET(gtk_builder_get_object(obj,obj2))
|
||||||
|
typedef struct IVGrapgicals{
|
||||||
|
char *sectionName;
|
||||||
|
char *categories;
|
||||||
|
GtkListStore *LV;
|
||||||
|
GtkWidget *Box;
|
||||||
|
GtkWidget *IV;
|
||||||
|
GtkWidget *label;
|
||||||
|
GtkWidget *sep;
|
||||||
|
GtkCellRendererPixbuf *iconRender;
|
||||||
|
} IVGraphicals;
|
||||||
|
|
||||||
|
|
||||||
|
GtkWidget *yon_gtk_socket_create_new_with_connect(GtkWidget *container, gpointer data);
|
||||||
|
|
||||||
|
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
|
||||||
|
|
||||||
|
//uninitialised
|
||||||
|
|
||||||
|
void yon_on_plug_added(GtkSocket* self, gpointer user_data);
|
||||||
|
void yon_on_plug_removed(GtkSocket* self, gpointer user_data);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1,91 @@
|
|||||||
|
.noborder {
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
.thin {
|
||||||
|
margin:0px;
|
||||||
|
padding:0px;
|
||||||
|
}
|
||||||
|
.textoutline {
|
||||||
|
text-shadow: 0.5px 0 0.5px @theme_bg_color,
|
||||||
|
0 0.5px 0.5px @theme_bg_color,
|
||||||
|
-0.5px 0 0.5px @theme_bg_color,
|
||||||
|
0 -0.5px 0.5px @theme_bg_color;
|
||||||
|
}
|
||||||
|
.nobackground {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
.menuitembottom{
|
||||||
|
margin-top:0px;
|
||||||
|
margin-bottom:3px;
|
||||||
|
border-color:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
.menuitemmiddle{
|
||||||
|
margin-top:0px;
|
||||||
|
margin-bottom:0px;
|
||||||
|
border-color:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menuitemtop{
|
||||||
|
margin-bottom:0px;
|
||||||
|
border-color:inherit;
|
||||||
|
border-top-width:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
.menuitemtop *{
|
||||||
|
margin:2px 2px 0 2px;
|
||||||
|
padding: 5px 10px 3px 5px;
|
||||||
|
border:transparent;
|
||||||
|
}
|
||||||
|
.menuitemmiddle *{
|
||||||
|
margin:0 2px 0 2px;
|
||||||
|
padding: 3px 10px 3px 5px;
|
||||||
|
border:transparent;
|
||||||
|
}
|
||||||
|
.menuitembottom *{
|
||||||
|
margin:0 2px 2px 2px;
|
||||||
|
padding: 3px 10px 5px 5px;
|
||||||
|
}
|
||||||
|
.menuitemtop:hover {
|
||||||
|
background:@theme_bg_color;
|
||||||
|
border-color:inherit;
|
||||||
|
border-top-width:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
.menuitemmiddle:hover {
|
||||||
|
background:@theme_bg_color;
|
||||||
|
border-color:inherit;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
}
|
||||||
|
.menuitembottom:hover {
|
||||||
|
background:@theme_bg_color;
|
||||||
|
border-color:inherit;
|
||||||
|
border-bottom-width:0px;
|
||||||
|
border-left-width:inherit;
|
||||||
|
border-right-width:inherit;
|
||||||
|
|
||||||
|
}
|
||||||
|
.menuitemtop:hover* {
|
||||||
|
margin:2px 2px 0 2px;
|
||||||
|
padding: 5px 10px 3px 5px;
|
||||||
|
background:@theme_selected_bg_color;
|
||||||
|
border-radius:2px;
|
||||||
|
}
|
||||||
|
.menuitemmiddle:hover* {
|
||||||
|
margin:0 2px 0 2px;
|
||||||
|
padding: 3px 10px 3px 5px;
|
||||||
|
background:@theme_selected_bg_color;
|
||||||
|
border-radius:2px;
|
||||||
|
}
|
||||||
|
.menuitembottom:hover* {
|
||||||
|
margin:0 2px 2px 2px;
|
||||||
|
padding: 3px 10px 5px 5px;
|
||||||
|
background:@theme_selected_bg_color;
|
||||||
|
border-radius:2px;
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Encoding=UTF-8
|
||||||
|
Name=ubl-settings-video
|
||||||
|
Name[ru]=Настройки Видеовывода
|
||||||
|
GenericName=ubl-settings-video
|
||||||
|
GenericName[ru]=Настройки Видеовывода
|
||||||
|
Comment=ubl-settings-video
|
||||||
|
Comment[ru]=Приложение для управления настройками видеовывода для UBLinux
|
||||||
|
Type=Application
|
||||||
|
Exec=ubl-settings-video
|
||||||
|
Icon=com.ublinux.ubl-settings-video
|
||||||
|
Terminal=false
|
||||||
|
X-XfcePluggable=true
|
||||||
|
X-UBLPluggable=true
|
||||||
|
Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;
|
||||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,170 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2023-03-27 12:30+0600\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:33
|
||||||
|
msgid "Monitor: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:34
|
||||||
|
msgid "Resolution (px): "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:35
|
||||||
|
msgid "Frequency (Hz): "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:36
|
||||||
|
msgid "Rotation: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:37
|
||||||
|
msgid "Do not switch display off"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:39
|
||||||
|
msgid "Main monitor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:40
|
||||||
|
msgid "through parameter line:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:41
|
||||||
|
msgid "DPMS off"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:125
|
||||||
|
msgid "Launch programms through (nVidia)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:126
|
||||||
|
msgid "Video output configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:127
|
||||||
|
msgid "Proprietary driver: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:128
|
||||||
|
msgid "Failsafe driver nVidia: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:129
|
||||||
|
msgid "Failsafe driver AMD/ATI: "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:130
|
||||||
|
msgid "Driver"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:131
|
||||||
|
msgid "Configuration method"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:132
|
||||||
|
msgid "Monitor configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:133
|
||||||
|
msgid "discrete video only (AMD/ATI)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:134
|
||||||
|
msgid "Hybrid graphics"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:135
|
||||||
|
msgid "Fix frame gap (nVidia)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:136
|
||||||
|
msgid "Extra"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:137
|
||||||
|
msgid "UBlinux Video Configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:138
|
||||||
|
msgid "Load"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:139
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:141
|
||||||
|
msgid "Manual configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:142
|
||||||
|
msgid "On"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:143
|
||||||
|
msgid "Automatically choose and use driver"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:145
|
||||||
|
msgid "Load from global configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:146
|
||||||
|
msgid "Load from local configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:147
|
||||||
|
msgid "Save to global an local configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:148
|
||||||
|
msgid "Save to global configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:149
|
||||||
|
msgid "Save to local configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:150
|
||||||
|
msgid "Documentation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:151
|
||||||
|
msgid "About"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.c:153
|
||||||
|
msgid "Change"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.h:16
|
||||||
|
msgid "Failed to load global configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.h:17
|
||||||
|
msgid "Failed to load local configuration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.h:19
|
||||||
|
msgid "Saving to global configuration Succeeded"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: source/ubl-settings-video.h:20
|
||||||
|
msgid "Saving to local configuration Succeeded"
|
||||||
|
msgstr ""
|
||||||
Loading…
Reference in new issue