1/* Shortcuts Window
2 *
3 * GtkShortcutsWindow is a window that provides a help overlay
4 * for shortcuts and gestures in an application.
5 */
6
7#include <gtk/gtk.h>
8
9static void
10show_shortcuts (GtkWidget *window,
11 const char *id,
12 const char *view)
13{
14 GtkBuilder *builder;
15 GtkWidget *overlay;
16 char *path;
17
18 path = g_strdup_printf (format: "/shortcuts/%s.ui", id);
19 builder = gtk_builder_new_from_resource (resource_path: path);
20 g_free (mem: path);
21 overlay = GTK_WIDGET (gtk_builder_get_object (builder, id));
22 gtk_window_set_transient_for (GTK_WINDOW (overlay), GTK_WINDOW (window));
23 g_object_set (object: overlay, first_property_name: "view-name", view, NULL);
24 gtk_widget_show (widget: overlay);
25 g_object_unref (object: builder);
26}
27
28G_MODULE_EXPORT void
29shortcuts_builder_shortcuts (GtkWidget *window)
30{
31 show_shortcuts (window, id: "shortcuts-builder", NULL);
32}
33
34G_MODULE_EXPORT void
35shortcuts_gedit_shortcuts (GtkWidget *window)
36{
37 show_shortcuts (window, id: "shortcuts-gedit", NULL);
38}
39
40G_MODULE_EXPORT void
41shortcuts_clocks_shortcuts (GtkWidget *window)
42{
43 show_shortcuts (window, id: "shortcuts-clocks", NULL);
44}
45
46G_MODULE_EXPORT void
47shortcuts_clocks_shortcuts_stopwatch (GtkWidget *window)
48{
49 show_shortcuts (window, id: "shortcuts-clocks", view: "stopwatch");
50}
51
52G_MODULE_EXPORT void
53shortcuts_boxes_shortcuts (GtkWidget *window)
54{
55 show_shortcuts (window, id: "shortcuts-boxes", NULL);
56}
57
58G_MODULE_EXPORT void
59shortcuts_boxes_shortcuts_wizard (GtkWidget *window)
60{
61 show_shortcuts (window, id: "shortcuts-boxes", view: "wizard");
62}
63
64G_MODULE_EXPORT void
65shortcuts_boxes_shortcuts_display (GtkWidget *window)
66{
67 show_shortcuts (window, id: "shortcuts-boxes", view: "display");
68}
69
70GtkWidget *
71do_shortcuts (GtkWidget *do_widget)
72{
73 static GtkWidget *window = NULL;
74 static gboolean icons_added = FALSE;
75
76 if (!icons_added)
77 {
78 icons_added = TRUE;
79 gtk_icon_theme_add_resource_path (self: gtk_icon_theme_get_for_display (display: gtk_widget_get_display (widget: do_widget)), path: "/icons");
80 }
81
82 g_type_ensure (G_TYPE_FILE_ICON);
83
84 if (!window)
85 {
86 GtkBuilder *builder;
87
88 builder = gtk_builder_new_from_resource (resource_path: "/shortcuts/shortcuts.ui");
89 window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
90 gtk_window_set_display (GTK_WINDOW (window),
91 display: gtk_widget_get_display (widget: do_widget));
92 g_object_add_weak_pointer (G_OBJECT (window), weak_pointer_location: (gpointer *)&window);
93
94 g_object_unref (object: builder);
95 }
96
97 if (!gtk_widget_get_visible (widget: window))
98 gtk_widget_show (widget: window);
99 else
100 gtk_window_destroy (GTK_WINDOW (window));
101
102 return window;
103}
104

source code of gtk/demos/gtk-demo/shortcuts.c