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 | |
9 | static void |
10 | show_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 | |
28 | G_MODULE_EXPORT void |
29 | shortcuts_builder_shortcuts (GtkWidget *window) |
30 | { |
31 | show_shortcuts (window, id: "shortcuts-builder" , NULL); |
32 | } |
33 | |
34 | G_MODULE_EXPORT void |
35 | shortcuts_gedit_shortcuts (GtkWidget *window) |
36 | { |
37 | show_shortcuts (window, id: "shortcuts-gedit" , NULL); |
38 | } |
39 | |
40 | G_MODULE_EXPORT void |
41 | shortcuts_clocks_shortcuts (GtkWidget *window) |
42 | { |
43 | show_shortcuts (window, id: "shortcuts-clocks" , NULL); |
44 | } |
45 | |
46 | G_MODULE_EXPORT void |
47 | shortcuts_clocks_shortcuts_stopwatch (GtkWidget *window) |
48 | { |
49 | show_shortcuts (window, id: "shortcuts-clocks" , view: "stopwatch" ); |
50 | } |
51 | |
52 | G_MODULE_EXPORT void |
53 | shortcuts_boxes_shortcuts (GtkWidget *window) |
54 | { |
55 | show_shortcuts (window, id: "shortcuts-boxes" , NULL); |
56 | } |
57 | |
58 | G_MODULE_EXPORT void |
59 | shortcuts_boxes_shortcuts_wizard (GtkWidget *window) |
60 | { |
61 | show_shortcuts (window, id: "shortcuts-boxes" , view: "wizard" ); |
62 | } |
63 | |
64 | G_MODULE_EXPORT void |
65 | shortcuts_boxes_shortcuts_display (GtkWidget *window) |
66 | { |
67 | show_shortcuts (window, id: "shortcuts-boxes" , view: "display" ); |
68 | } |
69 | |
70 | GtkWidget * |
71 | do_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 | |