pidgin/pidginabout.c

changeset 39855
7c9c4d700ed2
parent 39533
4fbf60ed30c4
child 39913
ce96d4639dc7
equal deleted inserted replaced
39854:aa5f0b2be84b 39855:7c9c4d700ed2
30 30
31 #ifdef HAVE_MESON_CONFIG 31 #ifdef HAVE_MESON_CONFIG
32 #include "meson-config.h" 32 #include "meson-config.h"
33 #endif 33 #endif
34 34
35 typedef struct _PidginAboutDialogPrivate PidginAboutDialogPrivate;
36
37 struct _PidginAboutDialog { 35 struct _PidginAboutDialog {
38 GtkDialog parent; 36 GtkDialog parent;
39 37
40 /*< private >*/
41 PidginAboutDialogPrivate *priv;
42 };
43
44 struct _PidginAboutDialogClass {
45 GtkDialogClass parent;
46
47 void (*_pidgin_reserved1)(void);
48 void (*_pidgin_reserved2)(void);
49 void (*_pidgin_reserved3)(void);
50 void (*_pidgin_reserved4)(void);
51 };
52
53 struct _PidginAboutDialogPrivate {
54 GtkWidget *close_button; 38 GtkWidget *close_button;
55 GtkWidget *application_name; 39 GtkWidget *application_name;
56 GtkWidget *stack; 40 GtkWidget *stack;
57 41
58 GtkWidget *main_scrolled_window; 42 GtkWidget *main_scrolled_window;
68 52
69 GtkWidget *build_info_page; 53 GtkWidget *build_info_page;
70 GtkWidget *build_info_treeview; 54 GtkWidget *build_info_treeview;
71 GtkTreeStore *build_info_store; 55 GtkTreeStore *build_info_store;
72 }; 56 };
73
74 G_DEFINE_TYPE_WITH_PRIVATE(PidginAboutDialog, pidgin_about_dialog, GTK_TYPE_DIALOG);
75 57
76 /****************************************************************************** 58 /******************************************************************************
77 * Helpers 59 * Helpers
78 *****************************************************************************/ 60 *****************************************************************************/
79 static void 61 static void
82 "%s %s", 64 "%s %s",
83 PIDGIN_NAME, 65 PIDGIN_NAME,
84 VERSION 66 VERSION
85 ); 67 );
86 68
87 gtk_label_set_text(GTK_LABEL(about->priv->application_name), label); 69 gtk_label_set_text(GTK_LABEL(about->application_name), label);
88 70
89 g_free(label); 71 g_free(label);
90 } 72 }
91 73
92 static void 74 static void
93 _pidgin_about_dialog_load_main_page(PidginAboutDialog *about) { 75 _pidgin_about_dialog_load_main_page(PidginAboutDialog *about) {
94 PidginAboutDialogPrivate *priv = pidgin_about_dialog_get_instance_private(about);
95 GtkTextIter start; 76 GtkTextIter start;
96 GInputStream *istream = NULL; 77 GInputStream *istream = NULL;
97 GString *str = NULL; 78 GString *str = NULL;
98 gchar buffer[8192]; 79 gchar buffer[8192];
99 gssize read = 0, size = 0; 80 gssize read = 0, size = 0;
111 while((read = g_input_stream_read(istream, buffer, sizeof(buffer), NULL, NULL)) > 0) { 92 while((read = g_input_stream_read(istream, buffer, sizeof(buffer), NULL, NULL)) > 0) {
112 g_string_append_len(str, (gchar *)buffer, read); 93 g_string_append_len(str, (gchar *)buffer, read);
113 size += read; 94 size += read;
114 } 95 }
115 96
116 gtk_text_buffer_get_start_iter(priv->main_buffer, &start); 97 gtk_text_buffer_get_start_iter(about->main_buffer, &start);
117 98
118 talkatu_markdown_buffer_insert_markdown( 99 talkatu_markdown_buffer_insert_markdown(
119 TALKATU_MARKDOWN_BUFFER(priv->main_buffer), 100 TALKATU_MARKDOWN_BUFFER(about->main_buffer),
120 &start, 101 &start,
121 str->str, 102 str->str,
122 size 103 size
123 ); 104 );
124 105
206 g_input_stream_close(istream, NULL, NULL); 187 g_input_stream_close(istream, NULL, NULL);
207 } 188 }
208 189
209 static void 190 static void
210 _pidgin_about_dialog_load_developers(PidginAboutDialog *about) { 191 _pidgin_about_dialog_load_developers(PidginAboutDialog *about) {
211 _pidgin_about_dialog_load_json(about->priv->developers_store, "developers"); 192 _pidgin_about_dialog_load_json(about->developers_store, "developers");
212 } 193 }
213 194
214 static void 195 static void
215 _pidgin_about_dialog_load_translators(PidginAboutDialog *about) { 196 _pidgin_about_dialog_load_translators(PidginAboutDialog *about) {
216 _pidgin_about_dialog_load_json(about->priv->translators_store, "languages"); 197 _pidgin_about_dialog_load_json(about->translators_store, "languages");
217 } 198 }
218 199
219 static void 200 static void
220 _pidgin_about_dialog_add_build_args( 201 _pidgin_about_dialog_add_build_args(
221 PidginAboutDialog *about, 202 PidginAboutDialog *about,
226 gchar **splits = NULL; 207 gchar **splits = NULL;
227 gchar *markup = NULL; 208 gchar *markup = NULL;
228 gint idx = 0; 209 gint idx = 0;
229 210
230 markup = g_strdup_printf("<span font-weight=\"bold\">%s</span>", title); 211 markup = g_strdup_printf("<span font-weight=\"bold\">%s</span>", title);
231 gtk_tree_store_append(about->priv->build_info_store, &section, NULL); 212 gtk_tree_store_append(about->build_info_store, &section, NULL);
232 gtk_tree_store_set( 213 gtk_tree_store_set(
233 about->priv->build_info_store, 214 about->build_info_store,
234 &section, 215 &section,
235 0, markup, 216 0, markup,
236 -1 217 -1
237 ); 218 );
238 g_free(markup); 219 g_free(markup);
244 225
245 if(value_split[0] == NULL || value_split[0][0] == '\0') { 226 if(value_split[0] == NULL || value_split[0][0] == '\0') {
246 continue; 227 continue;
247 } 228 }
248 229
249 gtk_tree_store_append(about->priv->build_info_store, &value, &section); 230 gtk_tree_store_append(about->build_info_store, &value, &section);
250 gtk_tree_store_set( 231 gtk_tree_store_set(
251 about->priv->build_info_store, 232 about->build_info_store,
252 &value, 233 &value,
253 0, value_split[0] ? value_split[0] : "", 234 0, value_split[0] ? value_split[0] : "",
254 1, value_split[1] ? value_split[1] : "", 235 1, value_split[1] ? value_split[1] : "",
255 -1 236 -1
256 ); 237 );
291 /* create the section */ 272 /* create the section */
292 markup = g_strdup_printf( 273 markup = g_strdup_printf(
293 "<span font-weight=\"bold\">%s</span>", 274 "<span font-weight=\"bold\">%s</span>",
294 _("Build Information") 275 _("Build Information")
295 ); 276 );
296 gtk_tree_store_append(about->priv->build_info_store, &section, NULL); 277 gtk_tree_store_append(about->build_info_store, &section, NULL);
297 gtk_tree_store_set( 278 gtk_tree_store_set(
298 about->priv->build_info_store, 279 about->build_info_store,
299 &section, 280 &section,
300 0, markup, 281 0, markup,
301 -1 282 -1
302 ); 283 );
303 g_free(markup); 284 g_free(markup);
304 285
305 /* add the commit hash */ 286 /* add the commit hash */
306 gtk_tree_store_append(about->priv->build_info_store, &item, &section); 287 gtk_tree_store_append(about->build_info_store, &item, &section);
307 gtk_tree_store_set( 288 gtk_tree_store_set(
308 about->priv->build_info_store, 289 about->build_info_store,
309 &item, 290 &item,
310 0, "Commit Hash", 291 0, "Commit Hash",
311 1, REVISION, 292 1, REVISION,
312 -1 293 -1
313 ); 294 );
314 295
315 /* add the purple version */ 296 /* add the purple version */
316 _pidgin_about_dialog_build_info_add_version( 297 _pidgin_about_dialog_build_info_add_version(
317 about->priv->build_info_store, 298 about->build_info_store,
318 &section, 299 &section,
319 _("Purple Version"), 300 _("Purple Version"),
320 PURPLE_MAJOR_VERSION, 301 PURPLE_MAJOR_VERSION,
321 PURPLE_MINOR_VERSION, 302 PURPLE_MINOR_VERSION,
322 PURPLE_MICRO_VERSION 303 PURPLE_MICRO_VERSION
323 ); 304 );
324 305
325 /* add the glib version */ 306 /* add the glib version */
326 _pidgin_about_dialog_build_info_add_version( 307 _pidgin_about_dialog_build_info_add_version(
327 about->priv->build_info_store, 308 about->build_info_store,
328 &section, 309 &section,
329 _("GLib Version"), 310 _("GLib Version"),
330 GLIB_MAJOR_VERSION, 311 GLIB_MAJOR_VERSION,
331 GLIB_MINOR_VERSION, 312 GLIB_MINOR_VERSION,
332 GLIB_MICRO_VERSION 313 GLIB_MICRO_VERSION
333 ); 314 );
334 315
335 /* add the gtk version */ 316 /* add the gtk version */
336 _pidgin_about_dialog_build_info_add_version( 317 _pidgin_about_dialog_build_info_add_version(
337 about->priv->build_info_store, 318 about->build_info_store,
338 &section, 319 &section,
339 _("GTK+ Version"), 320 _("GTK+ Version"),
340 GTK_MAJOR_VERSION, 321 GTK_MAJOR_VERSION,
341 GTK_MINOR_VERSION, 322 GTK_MINOR_VERSION,
342 GTK_MICRO_VERSION 323 GTK_MICRO_VERSION
351 /* create the section */ 332 /* create the section */
352 markup = g_strdup_printf( 333 markup = g_strdup_printf(
353 "<span font-weight=\"bold\">%s</span>", 334 "<span font-weight=\"bold\">%s</span>",
354 _("Runtime Information") 335 _("Runtime Information")
355 ); 336 );
356 gtk_tree_store_append(about->priv->build_info_store, &section, NULL); 337 gtk_tree_store_append(about->build_info_store, &section, NULL);
357 gtk_tree_store_set( 338 gtk_tree_store_set(
358 about->priv->build_info_store, 339 about->build_info_store,
359 &section, 340 &section,
360 0, markup, 341 0, markup,
361 -1 342 -1
362 ); 343 );
363 g_free(markup); 344 g_free(markup);
364 345
365 /* add the purple version */ 346 /* add the purple version */
366 _pidgin_about_dialog_build_info_add_version( 347 _pidgin_about_dialog_build_info_add_version(
367 about->priv->build_info_store, 348 about->build_info_store,
368 &section, 349 &section,
369 _("Purple Version"), 350 _("Purple Version"),
370 purple_major_version, 351 purple_major_version,
371 purple_minor_version, 352 purple_minor_version,
372 purple_micro_version 353 purple_micro_version
373 ); 354 );
374 355
375 /* add the glib version */ 356 /* add the glib version */
376 _pidgin_about_dialog_build_info_add_version( 357 _pidgin_about_dialog_build_info_add_version(
377 about->priv->build_info_store, 358 about->build_info_store,
378 &section, 359 &section,
379 _("GLib Version"), 360 _("GLib Version"),
380 glib_major_version, 361 glib_major_version,
381 glib_minor_version, 362 glib_minor_version,
382 glib_micro_version 363 glib_micro_version
383 ); 364 );
384 365
385 /* add the gtk version */ 366 /* add the gtk version */
386 _pidgin_about_dialog_build_info_add_version( 367 _pidgin_about_dialog_build_info_add_version(
387 about->priv->build_info_store, 368 about->build_info_store,
388 &section, 369 &section,
389 _("GTK+ Version"), 370 _("GTK+ Version"),
390 gtk_major_version, 371 gtk_major_version,
391 gtk_minor_version, 372 gtk_minor_version,
392 gtk_micro_version 373 gtk_micro_version
412 } 393 }
413 394
414 /****************************************************************************** 395 /******************************************************************************
415 * GObject Stuff 396 * GObject Stuff
416 *****************************************************************************/ 397 *****************************************************************************/
398 G_DEFINE_TYPE(PidginAboutDialog, pidgin_about_dialog, GTK_TYPE_DIALOG);
399
417 static void 400 static void
418 pidgin_about_dialog_class_init(PidginAboutDialogClass *klass) { 401 pidgin_about_dialog_class_init(PidginAboutDialogClass *klass) {
419 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); 402 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
420 403
421 gtk_widget_class_set_template_from_resource( 404 gtk_widget_class_set_template_from_resource(
422 widget_class, 405 widget_class,
423 "/im/pidgin/Pidgin/About/about.ui" 406 "/im/pidgin/Pidgin/About/about.ui"
424 ); 407 );
425 408
426 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, close_button); 409 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, close_button);
427 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, application_name); 410 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, application_name);
428 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, stack); 411 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, stack);
429 412
430 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, main_scrolled_window); 413 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, main_scrolled_window);
431 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, main_buffer); 414 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, main_buffer);
432 415
433 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_page); 416 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, developers_page);
434 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_store); 417 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, developers_store);
435 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_treeview); 418 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, developers_treeview);
436 419
437 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_page); 420 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, translators_page);
438 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_store); 421 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, translators_store);
439 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_treeview); 422 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, translators_treeview);
440 423
441 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_page); 424 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, build_info_page);
442 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_store); 425 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, build_info_store);
443 gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_treeview); 426 gtk_widget_class_bind_template_child(widget_class, PidginAboutDialog, build_info_treeview);
444 } 427 }
445 428
446 static void 429 static void
447 pidgin_about_dialog_init(PidginAboutDialog *about) { 430 pidgin_about_dialog_init(PidginAboutDialog *about) {
448 about->priv = pidgin_about_dialog_get_instance_private(about);
449
450 gtk_widget_init_template(GTK_WIDGET(about)); 431 gtk_widget_init_template(GTK_WIDGET(about));
451 432
452 /* wire up the close button */ 433 /* wire up the close button */
453 g_signal_connect( 434 g_signal_connect(
454 about->priv->close_button, 435 about->close_button,
455 "clicked", 436 "clicked",
456 G_CALLBACK(_pidgin_about_dialog_close), 437 G_CALLBACK(_pidgin_about_dialog_close),
457 about 438 about
458 ); 439 );
459 440
463 /* setup the main page */ 444 /* setup the main page */
464 _pidgin_about_dialog_load_main_page(about); 445 _pidgin_about_dialog_load_main_page(about);
465 446
466 /* setup the developers stuff */ 447 /* setup the developers stuff */
467 _pidgin_about_dialog_load_developers(about); 448 _pidgin_about_dialog_load_developers(about);
468 gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->developers_treeview)); 449 gtk_tree_view_expand_all(GTK_TREE_VIEW(about->developers_treeview));
469 450
470 /* setup the translators stuff */ 451 /* setup the translators stuff */
471 _pidgin_about_dialog_load_translators(about); 452 _pidgin_about_dialog_load_translators(about);
472 gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->translators_treeview)); 453 gtk_tree_view_expand_all(GTK_TREE_VIEW(about->translators_treeview));
473 454
474 /* setup the build info page */ 455 /* setup the build info page */
475 _pidgin_about_dialog_load_build_configuration(about); 456 _pidgin_about_dialog_load_build_configuration(about);
476 gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->build_info_treeview)); 457 gtk_tree_view_expand_all(GTK_TREE_VIEW(about->build_info_treeview));
477 } 458 }
478 459
479 GtkWidget * 460 GtkWidget *
480 pidgin_about_dialog_new(void) { 461 pidgin_about_dialog_new(void) {
481 GtkWidget *about = NULL; 462 GtkWidget *about = NULL;

mercurial