5 get_clipboard (GtkWidget *widget)
7 return gtk_widget_get_clipboard (widget, gdk_atom_intern_static_string ("CLIPBOARD"));
11 window_copy (GSimpleAction *action,
15 GtkWindow *window = GTK_WINDOW (user_data);
16 GtkTextView *text = g_object_get_data ((GObject*)window, "bloatpad-text");
18 gtk_text_buffer_copy_clipboard (gtk_text_view_get_buffer (text),
19 get_clipboard ((GtkWidget*) text));
23 window_paste (GSimpleAction *action,
27 GtkWindow *window = GTK_WINDOW (user_data);
28 GtkTextView *text = g_object_get_data ((GObject*)window, "bloatpad-text");
30 gtk_text_buffer_paste_clipboard (gtk_text_view_get_buffer (text),
31 get_clipboard ((GtkWidget*) text),
37 static GActionEntry win_entries[] = {
38 { "copy", window_copy, NULL, NULL, NULL },
39 { "paste", window_paste, NULL, NULL, NULL },
43 new_window (GApplication *app,
46 GtkWidget *window, *grid, *scrolled, *view;
48 window = gtk_application_window_new (GTK_APPLICATION (app));
49 gtk_window_set_default_size ((GtkWindow*)window, 640, 480);
50 g_action_map_add_action_entries (G_ACTION_MAP (window), win_entries, G_N_ELEMENTS (win_entries), window);
51 gtk_window_set_title (GTK_WINDOW (window), "Bloatpad");
53 grid = gtk_grid_new ();
54 gtk_container_add (GTK_CONTAINER (window), grid);
56 scrolled = gtk_scrolled_window_new (NULL, NULL);
57 gtk_widget_set_hexpand (scrolled, TRUE);
58 gtk_widget_set_vexpand (scrolled, TRUE);
59 view = gtk_text_view_new ();
61 g_object_set_data ((GObject*)window, "bloatpad-text", view);
63 gtk_container_add (GTK_CONTAINER (scrolled), view);
65 gtk_grid_attach (GTK_GRID (grid), scrolled, 0, 0, 1, 1);
72 if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL))
74 GtkTextBuffer *buffer;
76 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
77 gtk_text_buffer_set_text (buffer, contents, length);
82 gtk_widget_show_all (GTK_WIDGET (window));
86 bloat_pad_activate (GApplication *application)
88 new_window (application, NULL);
92 bloat_pad_open (GApplication *application,
99 for (i = 0; i < n_files; i++)
100 new_window (application, files[i]);
103 typedef GtkApplication BloatPad;
104 typedef GtkApplicationClass BloatPadClass;
106 G_DEFINE_TYPE (BloatPad, bloat_pad, GTK_TYPE_APPLICATION)
109 bloat_pad_finalize (GObject *object)
111 G_OBJECT_CLASS (bloat_pad_parent_class)->finalize (object);
115 show_about (GSimpleAction *action,
119 GtkWindow *window = user_data;
121 gtk_show_about_dialog (window,
122 "program-name", "Bloatpad",
123 "title", "About Bloatpad",
124 "comments", "Not much to say, really.",
130 quit_app (GSimpleAction *action,
137 g_print ("Going down...\n");
139 list = gtk_application_get_windows (GTK_APPLICATION (g_application_get_default ()));
145 gtk_widget_destroy (GTK_WIDGET (win));
151 static GActionEntry app_entries[] = {
152 { "about", show_about, NULL, NULL, NULL },
153 { "quit", quit_app, NULL, NULL, NULL },
156 static GActionGroup *
157 create_app_actions (void)
159 GSimpleActionGroup *actions = g_simple_action_group_new ();
160 g_simple_action_group_add_entries (actions,
161 app_entries, G_N_ELEMENTS (app_entries),
164 return G_ACTION_GROUP (actions);
168 create_app_menu (void)
170 GMenu *menu = g_menu_new ();
171 g_menu_append (menu, "_About Bloatpad", "app.about");
172 g_menu_append (menu, "_Quit", "app.quit");
174 return G_MENU_MODEL (menu);
178 create_window_menu (void)
183 edit_menu = g_menu_new ();
184 g_menu_append (edit_menu, "_Copy", "win.copy");
185 g_menu_append (edit_menu, "_Paste", "win.paste");
187 g_menu_append (edit_menu, "_Fullscreen", "win.fullscreen");
189 menu = g_menu_new ();
190 g_menu_append_submenu (menu, "_Edit", (GMenuModel*)edit_menu);
191 g_object_unref (edit_menu);
193 return G_MENU_MODEL (menu);
197 bloat_pad_init (BloatPad *app)
199 GActionGroup *actions;
200 GMenuModel *app_menu;
201 GMenuModel *window_menu;
203 actions = create_app_actions ();
204 g_application_set_action_group (G_APPLICATION (app), actions);
205 g_object_unref (actions);
207 app_menu = create_app_menu ();
208 g_application_set_app_menu (G_APPLICATION (app), app_menu);
209 g_object_unref (app_menu);
211 window_menu = create_window_menu ();
212 g_application_set_menubar (G_APPLICATION (app), window_menu);
213 g_object_unref (window_menu);
217 bloat_pad_class_init (BloatPadClass *class)
219 G_OBJECT_CLASS (class)->finalize = bloat_pad_finalize;
221 G_APPLICATION_CLASS (class)->activate = bloat_pad_activate;
222 G_APPLICATION_CLASS (class)->open = bloat_pad_open;
230 return g_object_new (bloat_pad_get_type (),
231 "application-id", "org.gtk.Test.bloatpad",
232 "flags", G_APPLICATION_HANDLES_OPEN,
237 main (int argc, char **argv)
242 bloat_pad = bloat_pad_new ();
243 status = g_application_run (G_APPLICATION (bloat_pad), argc, argv);
244 g_object_unref (bloat_pad);