grim/glade-template

Cycle the icon when clicking on it
draft default tip
2021-04-30, Gary Kramlich
48884acdf40f
Cycle the icon when clicking on it
#include <glib/gstdio.h>
#include "fancywindow.h"
struct _FancyWindow {
GtkWindow parent;
GtkWidget *image;
};
static const gchar *icons[4] = {
"computer",
"audio-x-generic",
"start-here",
"user-trash",
};
static gint current_icon = 0;
G_DEFINE_TYPE(FancyWindow, fancy_window, GTK_TYPE_WINDOW)
static void
fancy_window_clicked_cb(GtkButton *button, gpointer data) {
g_printf("Button %p was clicked, with data %p\n", button, data);
}
static gboolean
fancy_window_image_clicked_cb(GtkWidget *widget, GdkEvent *event,
gpointer data)
{
FancyWindow *window = FANCY_WINDOW(data);
current_icon = current_icon + 1;
if(current_icon >= G_N_ELEMENTS(icons)) {
current_icon = 0;
}
gtk_image_set_from_icon_name(GTK_IMAGE(window->image), icons[current_icon],
GTK_ICON_SIZE_DIALOG);
return TRUE;
}
static void
fancy_window_init(FancyWindow *window) {
gtk_widget_init_template(GTK_WIDGET(window));
}
static void
fancy_window_class_init(FancyWindowClass *klass) {
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
gtk_widget_class_set_template_from_resource(widget_class,
"/fancy/fancywindow.ui");
gtk_widget_class_bind_template_child(widget_class, FancyWindow, image);
gtk_widget_class_bind_template_callback(widget_class,
fancy_window_clicked_cb);
gtk_widget_class_bind_template_callback(widget_class,
fancy_window_image_clicked_cb);
}
GtkWidget *
fancy_window_new(void) {
return g_object_new(FANCY_TYPE_WINDOW, NULL);
}