grim/glade-template
Clone
Summary
Browse
Changes
Graph
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
);
}