Repository navigation
Expand file tree
/
Copy pathexampleappwin.c
More file actions
84 lines (64 loc) · 2.29 KB
/
Copy pathexampleappwin.c
File metadata and controls
84 lines (64 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <gtk/gtk.h>
#include "exampleapp.h"
#include "exampleappwin.h"
struct _ExampleAppWindow
{
GtkApplicationWindow parent;
};
struct _ExampleAppWindowClass
{
GtkApplicationWindowClass parent_class;
};
struct _ExampleAppWindowPrivate
{
GSettings *settings;
GtkWidget *stack;
};
G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW)
static void example_app_window_init(ExampleAppWindow *win)
{
ExampleAppWindowPrivate *priv;
priv = example_app_window_get_instance_private(win);
gtk_widget_init_template(GTK_WIDGET(win));
priv->settings = g_settings_new("net.bingliu.exampleapp");
g_settings_bind(priv->settings, "transition", priv->stack, "transition-type", G_SETTINGS_BIND_DEFAULT);
}
static void example_app_window_dispose(GObject *object)
{
}
static void example_app_window_class_init(ExampleAppWindowClass *class)
{
gtk_widget_class_set_template_from_resource(GTK_WIDGET_CLASS(class), "/net/bingliu/exampleapp/window.ui");
gtk_widget_class_bind_template_child_private(GTK_WIDGET_CLASS(class), ExampleAppWindow, stack);
}
ExampleAppWindow *example_app_window_new(ExampleApp *app)
{
return g_object_new(EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
}
void example_app_window_open(ExampleAppWindow *win, GFile *file)
{
ExampleAppWindowPrivate *priv;
gchar *basename;
GtkWidget *scrolled, *view;
gchar *contents;
gsize length;
priv = example_app_window_get_instance_private(win);
basename = g_file_get_basename(file);
scrolled = gtk_scrolled_window_new(NULL, NULL);
gtk_widget_show(scrolled);
gtk_widget_set_hexpand(scrolled, TRUE);
gtk_widget_set_vexpand(scrolled, TRUE);
view = gtk_text_view_new();
gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE);
gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE);
gtk_widget_show(view);
gtk_container_add(GTK_CONTAINER(scrolled), view);
gtk_stack_add_titled(GTK_STACK(priv->stack), scrolled, basename, basename);
if (g_file_load_contents(file, NULL, &contents, &length, NULL, NULL)) {
GtkTextBuffer *buffer;
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
gtk_text_buffer_set_text(buffer, contents, length);
g_free(contents);
}
g_free(basename);
}