From 2eb289ead1d00d6e90bce060480eb86db337e0a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stig-=C3=98rjan=20Smelror?= Date: Fri, 9 Aug 2024 23:15:28 +0200 Subject: [PATCH] Update screenshot and add screenshot of settings to README.md --- .qmake.stash | 22 +++ Makefile.old | 486 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + resources.qrc | 6 + ssdd-gtk.c | 242 +++++++++++++++++++++++ ssdd-qt.cpp | 115 +++++++++++ ssdd-qt.pro | 10 + ssdd-settings.png | Bin 0 -> 30157 bytes ssdd.png | Bin 16352 -> 16871 bytes 9 files changed, 883 insertions(+) create mode 100644 .qmake.stash create mode 100644 Makefile.old create mode 100644 resources.qrc create mode 100644 ssdd-gtk.c create mode 100644 ssdd-qt.cpp create mode 100644 ssdd-qt.pro create mode 100644 ssdd-settings.png 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 0000000000000000000000000000000000000000..34fccadd74325138acc402f48505cf809d3049c7 GIT binary patch literal 30157 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 Ull&5}MITH;L{_+3P(Sd00c=&P-~a#s