diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..71be687 --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +# Makefile for Mode Switcher GTK application + +# Compiler +CC = gcc + +# Compiler flags +CFLAGS = `pkg-config --cflags gtk+-3.0` + +# Linker flags +LDFLAGS = `pkg-config --libs gtk+-3.0` + +# Source files +SRC = mode_switcher.c + +# Object files +OBJ = $(SRC:.c=.o) + +# Executable name +EXECUTABLE = themeswitcher + +all: $(EXECUTABLE) + +$(EXECUTABLE): $(OBJ) + $(CC) $(OBJ) -o $(EXECUTABLE) $(LDFLAGS) + +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -f $(OBJ) $(EXECUTABLE) diff --git a/evolution-theme-switcher.desktop b/evolution-theme-switcher.desktop new file mode 100644 index 0000000..9611e6d --- /dev/null +++ b/evolution-theme-switcher.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +TryExec=themeswitcher +Exec=themeswitcher +Icon=weather-clear-symbloic +Terminal=false +Categories=System; + +Name=Theme Switcher +GenericName=Theme Switcher +Comment=Simple switcher between a light and dark theme +StartupWMClass=themeswitcher diff --git a/themeswitcher.c b/themeswitcher.c new file mode 100644 index 0000000..2f6c44f --- /dev/null +++ b/themeswitcher.c @@ -0,0 +1,67 @@ +#include +#include +#include // For system() function + +static void light_mode_clicked(GtkWidget *widget, gpointer data) +{ + GSettings *settings = g_settings_new("org.gnome.desktop.interface"); + g_settings_set_string(settings, "gtk-theme", "Adwaita"); + g_settings_set_string(settings, "color-scheme", "prefer-light"); + g_object_unref(settings); + + settings = g_settings_new("org.gnome.desktop.wm.preferences"); + g_settings_set_string(settings, "theme", "Adwaita"); + g_object_unref(settings); + + // Restart and fork wf-panel into the background + system("pkill wf-panel"); + system("wf-panel &"); +} + +static void dark_mode_clicked(GtkWidget *widget, gpointer data) +{ + GSettings *settings = g_settings_new("org.gnome.desktop.interface"); + g_settings_set_string(settings, "gtk-theme", "Adwaita-dark"); + g_settings_set_string(settings, "color-scheme", "prefer-dark"); + g_object_unref(settings); + + settings = g_settings_new("org.gnome.desktop.wm.preferences"); + g_settings_set_string(settings, "theme", "Adwaita-dark"); + g_object_unref(settings); + + // Restart and fork wf-panel into the background + system("pkill wf-panel"); + system("wf-panel &"); +} + +int main(int argc, char *argv[]) +{ + gtk_init(&argc, &argv); + + GtkWidget *window; + GtkWidget *box; + GtkWidget *light_button; + GtkWidget *dark_button; + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "Mode Switcher"); + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); + + box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); + gtk_container_add(GTK_CONTAINER(window), box); + + light_button = gtk_button_new_with_label("Light Mode"); + g_signal_connect(light_button, "clicked", G_CALLBACK(light_mode_clicked), NULL); + gtk_box_pack_start(GTK_BOX(box), light_button, TRUE, TRUE, 0); + + dark_button = gtk_button_new_with_label("Dark Mode"); + g_signal_connect(dark_button, "clicked", G_CALLBACK(dark_mode_clicked), NULL); + gtk_box_pack_start(GTK_BOX(box), dark_button, TRUE, TRUE, 0); + + gtk_widget_show_all(window); + + gtk_main(); + + return 0; +} +