diff --git a/.qmake.stash b/.qmake.stash new file mode 100644 index 0000000..6ce297d --- /dev/null +++ b/.qmake.stash @@ -0,0 +1,22 @@ +QMAKE_CXX.QT_COMPILER_STDCXX = 201703L +QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 14 +QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 1 +QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_GCC_MAJOR_VERSION \ + QMAKE_GCC_MINOR_VERSION \ + QMAKE_GCC_PATCH_VERSION +QMAKE_CXX.INCDIRS = \ + /usr/include/c++/14 \ + /usr/include/c++/14/x86_64-mageia-linux \ + /usr/include/c++/14/backward \ + /usr/lib/gcc/x86_64-mageia-linux/14/include \ + /usr/local/include \ + /usr/include +QMAKE_CXX.LIBDIRS = \ + /usr/lib/gcc/x86_64-mageia-linux/14 \ + /usr/lib64 \ + /lib64 \ + /usr/lib \ + /lib diff --git a/Makefile.old b/Makefile.old new file mode 100644 index 0000000..1e49d23 --- /dev/null +++ b/Makefile.old @@ -0,0 +1,486 @@ +############################################################################# +# Makefile for building: ssdd +# Generated by qmake (3.1) (Qt 6.7.1) +# Project: ssdd-qt.pro +# Template: app +# Command: /usr/bin/qmake -o Makefile ssdd-qt.pro +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -g -pipe -Wformat -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -m64 -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection=full -fno-strict-aliasing -DPIC -fPIC -Wall -Wextra -D_REENTRANT $(DEFINES) +CXXFLAGS = -pipe -std=gnu++17 -O2 -g -pipe -Wformat -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -m64 -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection=full -fno-strict-aliasing -DPIC -fPIC -Wall -Wextra -D_REENTRANT $(DEFINES) +INCPATH = -I. -I/usr/include/qt6 -I/usr/include/qt6/QtWidgets -I/usr/include/qt6/QtGui -I/usr/include/qt6/QtCore -I. -I/usr/lib64/qt6/mkspecs/linux-g++ +QMAKE = /usr/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = ssdd1.0.0 +DISTDIR = /home/stig/projects/ssdd/.tmp/ssdd1.0.0 +LINK = g++ +LFLAGS = -Wl,-O1 -Wl,-rpath-link,/usr/lib64 +LIBS = $(SUBLIBS) /usr/lib64/libQt6Widgets.so /usr/lib64/libQt6Gui.so /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so -lpthread -lGLX -lOpenGL +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = ssdd-qt.cpp qrc_resources.cpp +OBJECTS = ssdd-qt.o \ + qrc_resources.o +DIST = /usr/lib64/qt6/mkspecs/features/spec_pre.prf \ + /usr/lib64/qt6/mkspecs/common/unix.conf \ + /usr/lib64/qt6/mkspecs/common/linux.conf \ + /usr/lib64/qt6/mkspecs/common/sanitize.conf \ + /usr/lib64/qt6/mkspecs/common/gcc-base.conf \ + /usr/lib64/qt6/mkspecs/common/gcc-base-unix.conf \ + /usr/lib64/qt6/mkspecs/common/g++-base.conf \ + /usr/lib64/qt6/mkspecs/common/g++-unix.conf \ + /usr/lib64/qt6/mkspecs/qconfig.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_core.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_example_icons_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_network.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdf.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdf_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfquick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfquick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfwidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioning.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioning_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioningquick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioningquick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlbuiltins.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlbuiltins_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmldebug_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlintegration.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlintegration_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlmodels.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannel.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannel_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannelquick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannelquick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginecore.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginecore_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginewidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib64/qt6/mkspecs/features/qt_functions.prf \ + /usr/lib64/qt6/mkspecs/features/qt_config.prf \ + /usr/lib64/qt6/mkspecs/linux-g++/qmake.conf \ + /usr/lib64/qt6/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib64/qt6/mkspecs/features/exclusive_builds.prf \ + /usr/lib64/qt6/mkspecs/features/toolchain.prf \ + /usr/lib64/qt6/mkspecs/features/default_pre.prf \ + /usr/lib64/qt6/mkspecs/features/resolve_config.prf \ + /usr/lib64/qt6/mkspecs/features/default_post.prf \ + /usr/lib64/qt6/mkspecs/features/warn_on.prf \ + /usr/lib64/qt6/mkspecs/features/permissions.prf \ + /usr/lib64/qt6/mkspecs/features/qt.prf \ + /usr/lib64/qt6/mkspecs/features/resources_functions.prf \ + /usr/lib64/qt6/mkspecs/features/resources.prf \ + /usr/lib64/qt6/mkspecs/features/moc.prf \ + /usr/lib64/qt6/mkspecs/features/unix/opengl.prf \ + /usr/lib64/qt6/mkspecs/features/uic.prf \ + /usr/lib64/qt6/mkspecs/features/unix/thread.prf \ + /usr/lib64/qt6/mkspecs/features/qmake_use.prf \ + /usr/lib64/qt6/mkspecs/features/file_copies.prf \ + /usr/lib64/qt6/mkspecs/features/testcase_targets.prf \ + /usr/lib64/qt6/mkspecs/features/exceptions.prf \ + /usr/lib64/qt6/mkspecs/features/yacc.prf \ + /usr/lib64/qt6/mkspecs/features/lex.prf \ + ssdd-qt.pro ssdd-qt.cpp +QMAKE_TARGET = ssdd +DESTDIR = +TARGET = ssdd + + +first: all +####### Build rules + +ssdd: $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: ssdd-qt.pro /usr/lib64/qt6/mkspecs/linux-g++/qmake.conf /usr/lib64/qt6/mkspecs/features/spec_pre.prf \ + /usr/lib64/qt6/mkspecs/common/unix.conf \ + /usr/lib64/qt6/mkspecs/common/linux.conf \ + /usr/lib64/qt6/mkspecs/common/sanitize.conf \ + /usr/lib64/qt6/mkspecs/common/gcc-base.conf \ + /usr/lib64/qt6/mkspecs/common/gcc-base-unix.conf \ + /usr/lib64/qt6/mkspecs/common/g++-base.conf \ + /usr/lib64/qt6/mkspecs/common/g++-unix.conf \ + /usr/lib64/qt6/mkspecs/qconfig.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_core.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_example_icons_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_network.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_openglwidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdf.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdf_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfquick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfquick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_pdfwidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioning.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioning_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioningquick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_positioningquick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlbuiltins.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlbuiltins_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmldebug_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlintegration.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlintegration_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlmodels.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmlmodels_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannel.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannel_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannelquick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webchannelquick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginecore.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginecore_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequick.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequick_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_webenginewidgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib64/qt6/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib64/qt6/mkspecs/features/qt_functions.prf \ + /usr/lib64/qt6/mkspecs/features/qt_config.prf \ + /usr/lib64/qt6/mkspecs/linux-g++/qmake.conf \ + /usr/lib64/qt6/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib64/qt6/mkspecs/features/exclusive_builds.prf \ + /usr/lib64/qt6/mkspecs/features/toolchain.prf \ + /usr/lib64/qt6/mkspecs/features/default_pre.prf \ + /usr/lib64/qt6/mkspecs/features/resolve_config.prf \ + /usr/lib64/qt6/mkspecs/features/default_post.prf \ + /usr/lib64/qt6/mkspecs/features/warn_on.prf \ + /usr/lib64/qt6/mkspecs/features/permissions.prf \ + /usr/lib64/qt6/mkspecs/features/qt.prf \ + /usr/lib64/qt6/mkspecs/features/resources_functions.prf \ + /usr/lib64/qt6/mkspecs/features/resources.prf \ + /usr/lib64/qt6/mkspecs/features/moc.prf \ + /usr/lib64/qt6/mkspecs/features/unix/opengl.prf \ + /usr/lib64/qt6/mkspecs/features/uic.prf \ + /usr/lib64/qt6/mkspecs/features/unix/thread.prf \ + /usr/lib64/qt6/mkspecs/features/qmake_use.prf \ + /usr/lib64/qt6/mkspecs/features/file_copies.prf \ + /usr/lib64/qt6/mkspecs/features/testcase_targets.prf \ + /usr/lib64/qt6/mkspecs/features/exceptions.prf \ + /usr/lib64/qt6/mkspecs/features/yacc.prf \ + /usr/lib64/qt6/mkspecs/features/lex.prf \ + ssdd-qt.pro \ + resources.qrc \ + /usr/lib64/libQt6Widgets.prl \ + /usr/lib64/libQt6Gui.prl \ + /usr/lib64/libQt6Core.prl + $(QMAKE) -o Makefile ssdd-qt.pro +/usr/lib64/qt6/mkspecs/features/spec_pre.prf: +/usr/lib64/qt6/mkspecs/common/unix.conf: +/usr/lib64/qt6/mkspecs/common/linux.conf: +/usr/lib64/qt6/mkspecs/common/sanitize.conf: +/usr/lib64/qt6/mkspecs/common/gcc-base.conf: +/usr/lib64/qt6/mkspecs/common/gcc-base-unix.conf: +/usr/lib64/qt6/mkspecs/common/g++-base.conf: +/usr/lib64/qt6/mkspecs/common/g++-unix.conf: +/usr/lib64/qt6/mkspecs/qconfig.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_core.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_eglfs_kms_gbm_support_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_example_icons_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_gui.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_network.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_openglwidgets.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_openglwidgets_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_pdf.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_pdf_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_pdfquick.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_pdfquick_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_pdfwidgets.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_pdfwidgets_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_positioning.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_positioning_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_positioningquick.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_positioningquick_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qml.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qml_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmlbuiltins.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmlbuiltins_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmldebug_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmlintegration.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmlintegration_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmlmodels.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmlmodels_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_qmltest_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_quick.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_quick_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_quickwidgets_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_sql.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webchannel.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webchannel_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webchannelquick.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webchannelquick_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginecore.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginecore_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequick.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequick_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginequickdelegatesqml_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginewidgets.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_webenginewidgets_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_xml.pri: +/usr/lib64/qt6/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib64/qt6/mkspecs/features/qt_functions.prf: +/usr/lib64/qt6/mkspecs/features/qt_config.prf: +/usr/lib64/qt6/mkspecs/linux-g++/qmake.conf: +/usr/lib64/qt6/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/lib64/qt6/mkspecs/features/exclusive_builds.prf: +/usr/lib64/qt6/mkspecs/features/toolchain.prf: +/usr/lib64/qt6/mkspecs/features/default_pre.prf: +/usr/lib64/qt6/mkspecs/features/resolve_config.prf: +/usr/lib64/qt6/mkspecs/features/default_post.prf: +/usr/lib64/qt6/mkspecs/features/warn_on.prf: +/usr/lib64/qt6/mkspecs/features/permissions.prf: +/usr/lib64/qt6/mkspecs/features/qt.prf: +/usr/lib64/qt6/mkspecs/features/resources_functions.prf: +/usr/lib64/qt6/mkspecs/features/resources.prf: +/usr/lib64/qt6/mkspecs/features/moc.prf: +/usr/lib64/qt6/mkspecs/features/unix/opengl.prf: +/usr/lib64/qt6/mkspecs/features/uic.prf: +/usr/lib64/qt6/mkspecs/features/unix/thread.prf: +/usr/lib64/qt6/mkspecs/features/qmake_use.prf: +/usr/lib64/qt6/mkspecs/features/file_copies.prf: +/usr/lib64/qt6/mkspecs/features/testcase_targets.prf: +/usr/lib64/qt6/mkspecs/features/exceptions.prf: +/usr/lib64/qt6/mkspecs/features/yacc.prf: +/usr/lib64/qt6/mkspecs/features/lex.prf: +ssdd-qt.pro: +resources.qrc: +/usr/lib64/libQt6Widgets.prl: +/usr/lib64/libQt6Gui.prl: +/usr/lib64/libQt6Core.prl: +qmake: FORCE + @$(QMAKE) -o Makefile ssdd-qt.pro + +qmake_all: FORCE + + +all: Makefile ssdd + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents resources.qrc $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib64/qt6/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents ssdd-qt.cpp $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: qrc_resources.cpp +compiler_rcc_clean: + -$(DEL_FILE) qrc_resources.cpp +qrc_resources.cpp: resources.qrc \ + /usr/lib64/qt6/libexec/rcc \ + ssdd-icon.png + /usr/lib64/qt6/libexec/rcc -name resources resources.qrc -o qrc_resources.cpp + +compiler_moc_predefs_make_all: moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) moc_predefs.h +moc_predefs.h: /usr/lib64/qt6/mkspecs/features/data/dummy.cpp + g++ -pipe -std=gnu++17 -O2 -g -pipe -Wformat -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -m64 -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection=full -fno-strict-aliasing -DPIC -fPIC -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib64/qt6/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: ssdd-qt.moc +compiler_moc_source_clean: + -$(DEL_FILE) ssdd-qt.moc +ssdd-qt.moc: ssdd-qt.cpp \ + moc_predefs.h \ + /usr/lib64/qt6/libexec/moc + /usr/lib64/qt6/libexec/moc $(DEFINES) --include /home/stig/projects/ssdd/moc_predefs.h -I/usr/lib64/qt6/mkspecs/linux-g++ -I/home/stig/projects/ssdd -I/usr/include/qt6 -I/usr/include/qt6/QtWidgets -I/usr/include/qt6/QtGui -I/usr/include/qt6/QtCore -I/usr/include/c++/14 -I/usr/include/c++/14/x86_64-mageia-linux -I/usr/include/c++/14/backward -I/usr/lib/gcc/x86_64-mageia-linux/14/include -I/usr/local/include -I/usr/include ssdd-qt.cpp -o ssdd-qt.moc + +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_source_clean + +####### Compile + +ssdd-qt.o: ssdd-qt.cpp ssdd-qt.moc + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ssdd-qt.o ssdd-qt.cpp + +qrc_resources.o: qrc_resources.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_resources.o qrc_resources.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + +.SUFFIXES: + diff --git a/README.md b/README.md index c089479..724d8ed 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ A simple Shutdown Dialog for Openbox written in C using GTK ![Project Screenshot](ssdd.png) +![Settings screenshot](ssdd-settings.png) + **Simple Shutdown Dialog (ssdd)** is a simple yet stylish shutdown dialog for Openbox, crafted in C using GTK. ## Why ssdd? diff --git a/resources.qrc b/resources.qrc new file mode 100644 index 0000000..a7ddea7 --- /dev/null +++ b/resources.qrc @@ -0,0 +1,6 @@ + + + ssdd-icon.png + + + diff --git a/ssdd-gtk.c b/ssdd-gtk.c new file mode 100644 index 0000000..f725d82 --- /dev/null +++ b/ssdd-gtk.c @@ -0,0 +1,242 @@ +#include +#include +#include "resources.h" + +// Function declarations (prototypes) +static void execute_command(const gchar *command); +static void show_about_dialog(GtkWidget *widget); +static void button_clicked(GtkWidget *widget, gpointer data); +static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data); +static void show_confirmation_dialog(GtkWidget *widget, const gchar *label, const gchar *command); +static void create_button(GtkWidget *grid, GtkApplication *app, const gchar *label_text, const gchar *icon_name, const gchar *command, int pos); + +static void execute_command(const gchar *command) { + GError *error = NULL; + gboolean ret = g_spawn_command_line_async(command, &error); + if (!ret) { + GtkWidget *dialog; + dialog = gtk_message_dialog_new(NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + "Error executing command: %s\n%s", + command, + error->message); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + g_error_free(error); + } +} + +static void show_about_dialog(GtkWidget *widget) { + GtkWidget *dialog; + GtkWidget *content_area; + GtkWidget *label; + GtkWidget *image; + GtkWidget *box; + const gchar *about_text = + "\nAbout Simple ShutDown Dialog\n\n" + "Version: 1.3\n" + "Author: kekePower\n" + "URL: https://git.kekepower.com/kekePower/ssdd\n" + "Description: This is a simple Shutdown Dialog for Openbox.\n"; + + dialog = gtk_dialog_new_with_buttons("About Simple ShutDown Dialog", + NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + "_Close", + GTK_RESPONSE_CLOSE, + NULL); + content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); + gtk_container_add(GTK_CONTAINER(content_area), box); + + image = gtk_image_new_from_resource("/org/gtk/ssdd/ssdd-icon.png"); + gtk_image_set_pixel_size(GTK_IMAGE(image), 250); // Assuming original size is 500x500 + gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); + + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), about_text); + gtk_label_set_selectable(GTK_LABEL(label), TRUE); + gtk_widget_set_halign(label, GTK_ALIGN_START); + gtk_widget_set_valign(label, GTK_ALIGN_START); + gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); + + gtk_widget_show_all(dialog); + + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); +} + +static void button_clicked(GtkWidget *widget, gpointer data) { + const gchar *command = (const gchar *)data; + const gchar *label = g_object_get_data(G_OBJECT(widget), "label"); + + if (g_strcmp0(command, "exit") == 0) { + g_application_quit(G_APPLICATION(g_object_get_data(G_OBJECT(widget), "app"))); + return; + } + + if (g_strcmp0(command, "about") == 0) { + show_about_dialog(widget); + } else { + GtkWidget *window = gtk_widget_get_toplevel(widget); + show_confirmation_dialog(window, label, command); + } +} + +static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) { + if (event->keyval == GDK_KEY_Escape) { + g_application_quit(G_APPLICATION(data)); + return TRUE; // Event handled + } + return FALSE; // Event not handled +} + +static void show_confirmation_dialog(GtkWidget *parent_window, const gchar *label, const gchar *command) { + GtkWidget *dialog; + gint response; + + gchar *message = g_strdup_printf("Are you sure you want to %s?", label); + + dialog = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dialog), "Confirmation"); + + // Set the transient parent correctly + gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(parent_window)); + + gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); + gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); + + GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10); + gtk_container_add(GTK_CONTAINER(content_area), box); + + GtkWidget *image = gtk_image_new_from_icon_name("dialog-warning", GTK_ICON_SIZE_DIALOG); + gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); + + GtkWidget *label_widget = gtk_label_new(message); + gtk_box_pack_start(GTK_BOX(box), label_widget, TRUE, TRUE, 0); + + gtk_dialog_add_buttons(GTK_DIALOG(dialog), + "Yes", GTK_RESPONSE_YES, + "No", GTK_RESPONSE_NO, + NULL); // Add NULL to terminate the list of buttons + + GtkWidget *button_box = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); // Get content area instead of action area + gtk_box_set_spacing(GTK_BOX(button_box), 10); // Adjust spacing as needed + gtk_widget_set_margin_top(button_box, 10); + + gtk_widget_show_all(dialog); // Show the dialog and its children + + response = gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + g_free(message); + + if (response == GTK_RESPONSE_YES) { + execute_command(command); + } +} + +static void create_button(GtkWidget *grid, GtkApplication *app, const gchar *label_text, const gchar *icon_name, const gchar *command, int pos) { + GtkWidget *button; + GtkWidget *box; + GtkWidget *image; + GtkWidget *label; + + button = gtk_button_new(); + box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); + gtk_container_add(GTK_CONTAINER(button), box); + + image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start(GTK_BOX(box), image, TRUE, TRUE, 0); + + label = gtk_label_new(label_text); + gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); + + //Add margin to the button + gtk_widget_set_margin_top(button, 10); + + g_object_set_data(G_OBJECT(button), "app", app); + g_object_set_data(G_OBJECT(button), "label", (gpointer) label_text); + g_signal_connect(button, "clicked", G_CALLBACK(button_clicked), (gpointer) command); + gtk_grid_attach(GTK_GRID(grid), button, pos % 4, pos / 4, 1, 1); +} + +static void activate(GtkApplication *app, gpointer user_data) { + GtkWidget *window; + GtkWidget *grid; + const gchar *buttons[] = { + "openbox --exit", + "systemctl reboot", + "systemctl poweroff", + "dm-tool switch-to-greeter", + "systemctl suspend", + "systemctl hibernate", + "about", + "exit" + }; + const gchar *icons[] = { + "system-log-out", + "view-refresh", + "system-shutdown", + "system-users", + "media-playback-pause", + "media-playback-stop", + "help-about", + "application-exit" + }; + const gchar *labels[] = { // Define the labels array here + "Logout", + "Reboot", + "Shutdown", + "Switch User", + "Suspend", + "Hibernate", + "About", + "Exit" + }; + + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "Simple ShutDown Dialog"); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + + // Load the icon with error handling + GError *error = NULL; + GdkPixbuf *icon_pixbuf = gdk_pixbuf_new_from_resource("/org/gtk/ssdd/ssdd-icon.png", &error); + if (icon_pixbuf) { + gtk_window_set_icon(GTK_WINDOW(window), icon_pixbuf); + g_object_unref(icon_pixbuf); // Free the pixbuf + } else { + g_warning("Failed to load icon: %s", error->message); + g_error_free(error); + } + + g_signal_connect(window, "key-press-event", G_CALLBACK(on_key_press), app); + + grid = gtk_grid_new(); + gtk_container_add(GTK_CONTAINER(window), grid); + + for (int i = 0; i < 8; i++) { + create_button(grid, app, labels[i], icons[i], buttons[i], i); + } + + gtk_widget_show_all(window); +} + +int main(int argc, char **argv) { + GtkApplication *app; + int status; + + // Register the resource + g_resources_register(resources_get_resource()); + + app = gtk_application_new("org.gtk.ssdd", G_APPLICATION_DEFAULT_FLAGS); + g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); + status = g_application_run(G_APPLICATION(app), argc, argv); + g_object_unref(app); + + return status; +} + + diff --git a/ssdd-qt.cpp b/ssdd-qt.cpp new file mode 100644 index 0000000..01a4f9a --- /dev/null +++ b/ssdd-qt.cpp @@ -0,0 +1,115 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SimpleShutDownDialog : public QWidget { + Q_OBJECT + +public: + SimpleShutDownDialog() { + setWindowTitle("Simple ShutDown Dialog"); + setWindowIcon(QIcon(":/icons/ssdd-icon.png")); + setWindowFlags(Qt::Dialog); + setWindowModality(Qt::ApplicationModal); + + QVBoxLayout *mainLayout = new QVBoxLayout; + QGridLayout *gridLayout = new QGridLayout; + + const QStringList labels = { + "Logout", "Reboot", "Shutdown", "Switch User", + "Suspend", "Hibernate", "About", "Exit" + }; + const QStringList icons = { + "system-log-out", "view-refresh", "system-shutdown", "system-users", + "media-playback-pause", "media-playback-stop", "help-about", "application-exit" + }; + const QStringList commands = { + "openbox --exit", "systemctl reboot", "systemctl poweroff", "dm-tool switch-to-greeter", + "systemctl suspend", "systemctl hibernate", "about", "exit" + }; + + for (int i = 0; i < labels.size(); ++i) { + QPushButton *button = new QPushButton; + QVBoxLayout *vbox = new QVBoxLayout; + QLabel *iconLabel = new QLabel; + iconLabel->setPixmap(QIcon::fromTheme(icons[i]).pixmap(48)); + QLabel *textLabel = new QLabel(labels[i]); + vbox->addWidget(iconLabel, 0, Qt::AlignHCenter); + vbox->addWidget(textLabel, 0, Qt::AlignHCenter); + button->setLayout(vbox); + + connect(button, &QPushButton::clicked, this, [this, commands, i]() { + onButtonClicked(commands[i]); + }); + + gridLayout->addWidget(button, i / 4, i % 4); + } + + mainLayout->addLayout(gridLayout); + setLayout(mainLayout); + } + +protected: + void keyPressEvent(QKeyEvent *event) override { + if (event->key() == Qt::Key_Escape) { + QApplication::quit(); + } else { + QWidget::keyPressEvent(event); + } + } + +private slots: + void onButtonClicked(const QString &command) { + if (command == "about") { + showAboutDialog(); + } else if (command == "exit") { + QApplication::quit(); + } else { + showConfirmationDialog(command); + } + } + + void showAboutDialog() { + QMessageBox aboutBox; + aboutBox.setWindowTitle("About Simple ShutDown Dialog"); + aboutBox.setIconPixmap(QPixmap(":/icons/ssdd-icon.png").scaled(250, 250, Qt::KeepAspectRatio)); + aboutBox.setText( + "About Simple ShutDown Dialog

" + "Version: 1.3
" + "Author: kekePower
" + "URL: https://git.kekepower.com/kekePower/ssdd
" + "Description: This is a simple Shutdown Dialog for Openbox." + ); + aboutBox.exec(); + } + + void showConfirmationDialog(const QString &command) { + QMessageBox confirmBox; + confirmBox.setWindowTitle("Confirmation"); + confirmBox.setText(QString("Are you sure you want to %1?").arg(command)); + confirmBox.setIcon(QMessageBox::Warning); + confirmBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + + if (confirmBox.exec() == QMessageBox::Yes) { + QProcess::startDetached(command); + } + } +}; + +#include "ssdd-qt.moc" + +int main(int argc, char *argv[]) { + QApplication app(argc, argv); + + SimpleShutDownDialog dialog; + dialog.show(); + + return app.exec(); +} diff --git a/ssdd-qt.pro b/ssdd-qt.pro new file mode 100644 index 0000000..c05f44d --- /dev/null +++ b/ssdd-qt.pro @@ -0,0 +1,10 @@ +QT += core gui widgets + +CONFIG += c++11 + +TARGET = ssdd + +SOURCES += ssdd-qt.cpp + +RESOURCES += resources.qrc + diff --git a/ssdd-settings.png b/ssdd-settings.png new file mode 100644 index 0000000..34fccad Binary files /dev/null and b/ssdd-settings.png differ diff --git a/ssdd.png b/ssdd.png index a89ea91..96830cf 100644 Binary files a/ssdd.png and b/ssdd.png differ