| 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; |
| 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, |
| 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, §ion, NULL); |
277 gtk_tree_store_append(about->build_info_store, §ion, NULL); |
| 297 gtk_tree_store_set( |
278 gtk_tree_store_set( |
| 298 about->priv->build_info_store, |
279 about->build_info_store, |
| 299 §ion, |
280 §ion, |
| 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, §ion); |
287 gtk_tree_store_append(about->build_info_store, &item, §ion); |
| 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 §ion, |
299 §ion, |
| 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 §ion, |
309 §ion, |
| 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 §ion, |
319 §ion, |
| 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, §ion, NULL); |
337 gtk_tree_store_append(about->build_info_store, §ion, NULL); |
| 357 gtk_tree_store_set( |
338 gtk_tree_store_set( |
| 358 about->priv->build_info_store, |
339 about->build_info_store, |
| 359 §ion, |
340 §ion, |
| 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 §ion, |
349 §ion, |
| 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 §ion, |
359 §ion, |
| 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 §ion, |
369 §ion, |
| 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; |