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
85
86
|
#include "app.h"
#include <stdlib.h>
#include "dialer-res.h"
typedef struct _App {
GtkBuilder * bldr;
GtkWidget * popover;
GtkWidget * window;
GtkWidget * openpad;
GtkWidget * dial;
} App;
void
app_destroy (GtkWidget * widget, gpointer user_data) {
gtk_main_quit ();
}
void
app_do_stuff (GtkWidget * widget, App * user_data) {
gtk_widget_show_all (user_data->popover);
}
void
app_install_style (App * self) {
GtkCssProvider * cssprov = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (cssprov, "/org/gego/dialer/style.main.css");
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
cssprov,
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
App *
app_new () {
App * self = g_malloc (sizeof (App));
self->bldr = gtk_builder_new ();
GError * err = NULL;
if (!gtk_builder_add_from_resource (self->bldr, "/org/gego/dialer/main.glade", &err)) {
g_print ("Error: %s\n", err->message);
g_object_unref (self->bldr);
exit (1);
}
if (!gtk_builder_add_from_resource (self->bldr, "/org/gego/dialer/dial.glade", &err)) {
g_print ("Error: %s\n", err->message);
g_object_unref (self->bldr);
exit (1);
}
self->window = (GtkWidget *) gtk_builder_get_object (self->bldr,
"GnomeDialer");
self->openpad = (GtkWidget *) gtk_builder_get_object (self->bldr,
"openpad");
g_signal_connect (G_OBJECT (self->openpad), "clicked",
G_CALLBACK (app_do_stuff),
self);
gtk_builder_connect_signals(self->bldr, NULL);
g_signal_connect (G_OBJECT(self->window), "destroy",
G_CALLBACK(app_destroy),
self);
self->popover = gtk_popover_new (self->openpad);
gtk_container_add (GTK_CONTAINER (self->popover),
GTK_WIDGET(gtk_builder_get_object (self->bldr, "dial")));
app_install_style (self);
gtk_widget_show_all (self->window);
gtk_widget_hide (self->popover);
return self;
}
|