Tue, 19 Sep 2017 03:14:48 +0000
Merged in rw_grim/pidgin (pull request #252)
Revamp the about dialog
Approved-by: Eion Robb <eionrobb@gmail.com>
Approved-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
| pidgin/gtkdebug.c | file | annotate | diff | comparison | revisions |
--- a/pidgin/Makefile.am Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/Makefile.am Tue Sep 19 03:14:48 2017 +0000 @@ -81,7 +81,8 @@ gtkxfer.c \ libpidgin.c \ minidialog.c \ - pidgin.gresource.c \ + pidginabout.c \ + pidginresources.c \ pidgintooltip.c libpidgin_la_headers = \ @@ -129,6 +130,7 @@ gtkwhiteboard.h \ gtkxfer.h \ minidialog.h \ + pidginabout.h \ pidgintooltip.h \ pidgin.h @@ -167,22 +169,22 @@ libpidgininclude_HEADERS = \ $(libpidgin_la_headers) -libpidgin_la_builtheaders = pidgin.gresource.h -libpidgin_la_builtsources = pidgin.gresource.c +libpidgin_la_builtheaders = pidginresources.h +libpidgin_la_builtsources = pidginresources.c BUILT_SOURCES = $(libpidgin_la_builtheaders) $(libpidgin_la_builtsources) -CLEANFILES = pidgin.gresource.h pidgin.gresource.c +CLEANFILES = pidginresources.h pidginresources.c -%.gresource.h: %.gresource.xml +%resources.h: %.gresource.xml $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --generate-header --target $@ --c-name $* --sourcedir $(srcdir) $< -%.gresource.c: %.gresource.xml +%resources.c: %.gresource.xml $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --generate-source --target $@ --c-name $* --sourcedir $(srcdir) $< -pidgin.gresource.c: gtkdebug.html -pidgin.gresource.h: gtkdebug.html -gtkdebug.c: pidgin.gresource.h +pidginresources.c: gtkdebug.html +pidginresources.h: gtkdebug.html +gtkdebug.c: pidginresources.h libpidgin_la_DEPENDENCIES = @LIBOBJS@ $(LIBPIDGIN_WIN32RES) libpidgin_la_LDFLAGS = -export-dynamic -no-undefined \ @@ -198,6 +200,7 @@ $(GSTVIDEO_LIBS) \ $(GSTINTERFACES_LIBS) \ $(INTLLIBS) \ + $(JSON_LIBS) \ $(LIBXML_LIBS) \ $(WEBKIT_LIBS) \ $(GTK_LIBS) \ @@ -228,6 +231,7 @@ $(GSTINTERFACES_CFLAGS) \ $(DEBUG_CFLAGS) \ $(GTK_CFLAGS) \ + $(JSON_CFLAGS) \ $(X11_CFLAGS) \ $(DBUS_CFLAGS) \ $(LIBXML_CFLAGS) \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/about.html Tue Sep 19 03:14:48 2017 +0000 @@ -0,0 +1,22 @@ +<h2>Pidgin</h2> + +<p>Pidgin is a messaging client based on libpurple which is capable of connecting to multiple messaging services at once. Pidgin is written in C using GTK+. Pidgin is released, and may be modified and redistributed, under the terms of the GPL version 2 (or later). A copy of the GPL is distributed with Pidgin. Pidgin is copyrighted by its contributors, a list of whom is also distributed with Pidgin. There is no warranty for Pidgin.</p> + +<h3>Helpful Resources</h3> + +<ul> +<li><a href="https://pidgin.im">Website</a></li> +<li><a href="https://developer.pidgin.im/wiki/FAQ">Frequently Asked Questions</a></li> +<li>IRC Channel: #pidgin on irc.freenode.net</li> +<li>XMPP MUC: devel@conference.pidgin.im</li> +</ul> + +<p><strong>Help for Oracle Employees</strong> is available from your normal internal helpdesk or IT department. The Pidgin developer and user communities cannot assist you in the configuration or use of Pidgin within Oracle, as we know nothing of Oracle's infrastructure.</p> + +<p><strong>Help from other Pidgin users</strong> is available by e-mailing <a href="mailto:support@pidgin.im">support@pidgin.im</a>.</p> + +<p>This is a <strong>public</strong> mailing list with a <strong>public</strong> <a href="https://pidgin.im/pipermail/support/">archive</a>.</p> + +<p>We can't help with third-party protocols or plugins, but you may be able to find support via the <a href="https://developer.pidgin.im/wiki/ThirdPartyPlugins">ThirdPartyPlugins WIKI Page</a>.</p> + +<p>The list's primary language is English. You are welcome to post in another language, but the responses may be less helpful.</p>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/about.md Tue Sep 19 03:14:48 2017 +0000 @@ -0,0 +1,20 @@ +## Pidgin + +Pidgin is a messaging client based on libpurple which is capable of connecting to multiple messaging services at once. Pidgin is written in C using GTK+. Pidgin is released, and may be modified and redistributed, under the terms of the GPL version 2 (or later). A copy of the GPL is distributed with Pidgin. Pidgin is copyrighted by its contributors, a list of whom is also distributed with Pidgin. There is no warranty for Pidgin. + +### Helpful Resources + + * [Website](https://pidgin.im) + * [Frequently Asked Questions](https://developer.pidgin.im/wiki/FAQ) + * IRC Channel: #pidgin on irc.freenode.net + * XMPP MUC: devel@conference.pidgin.im + +**Help for Oracle Employees** is available from your normal internal helpdesk or IT department. The Pidgin developer and user communities cannot assist you in the configuration or use of Pidgin within Oracle, as we know nothing of Oracle's infrastructure. + +**Help from other Pidgin users** is available by e-mailing [support@pidgin.im](mailto:support@pidgin.im). + +This is a **public** mailing list with a **public** [archive](https://pidgin.im/pipermail/support/). + +We can't help with third-party protocols or plugins, but you may be able to find support via the [ThirdPartyPlugins WIKI Page](https://developer.pidgin.im/wiki/ThirdPartyPlugins). + +The list's primary language is English. You are welcome to post in another language, but the responses may be less helpful.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/about.ui Tue Sep 19 03:14:48 2017 +0000 @@ -0,0 +1,279 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.20.0 --> +<interface> + <requires lib="gtk+" version="3.10"/> + <object class="GtkTreeStore" id="build_info_store"> + <columns> + <!-- column-name title --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + </columns> + </object> + <object class="GtkTreeStore" id="developers_store"> + <columns> + <!-- column-name markup --> + <column type="gchararray"/> + <!-- column-name align --> + <column type="gfloat"/> + </columns> + </object> + <object class="GtkTreeStore" id="translators_store"> + <columns> + <!-- column-name markup --> + <column type="gchararray"/> + <!-- column-name align --> + <column type="gfloat"/> + </columns> + </object> + <template class="PidginAboutDialog" parent="GtkDialog"> + <property name="can_focus">False</property> + <property name="border_width">5</property> + <property name="resizable">False</property> + <property name="window_position">center</property> + <property name="type_hint">dialog</property> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> + <property name="can_focus">False</property> + <property name="layout_style">spread</property> + <child> + <object class="GtkStackSwitcher" id="switcher"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stack">stack</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="close_button"> + <property name="label" translatable="yes">Close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">5</property> + <child> + <object class="GtkEventBox" id="event-box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="above_child">True</property> + <child> + <object class="GtkImage" id="logo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="resource">/im/pidgin/Pidgin/logo.png</property> + <property name="icon_size">6</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="application_name"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Pidgin</property> + <property name="justify">center</property> + <property name="selectable">True</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkStack" id="stack"> + <property name="width_request">400</property> + <property name="height_request">150</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_bottom">2</property> + <property name="transition_type">slide-up</property> + <child> + <object class="GtkScrolledWindow" id="main_scrolled_window"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="shadow_type">in</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="name">main</property> + <property name="title" translatable="yes">General</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="developers_page"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="developers_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">developers_store</property> + <property name="headers_visible">False</property> + <property name="show_expanders">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="developers_column"> + <property name="resizable">True</property> + <property name="sizing">autosize</property> + <child> + <object class="GtkCellRendererText" id="developers_cell_renderer"/> + <attributes> + <attribute name="xalign">1</attribute> + <attribute name="markup">0</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="name">developers</property> + <property name="title" translatable="yes">Developers</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="translators_page"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="translators_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">translators_store</property> + <property name="headers_visible">False</property> + <property name="show_expanders">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="translators_column"> + <child> + <object class="GtkCellRendererText" id="translators_cell_renderer"/> + <attributes> + <attribute name="xalign">1</attribute> + <attribute name="markup">0</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="name">translators</property> + <property name="title" translatable="yes">Translators</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="build_info_page"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="build_info_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">build_info_store</property> + <property name="headers_visible">False</property> + <property name="show_expanders">False</property> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> + <child> + <object class="GtkTreeViewColumn"> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="markup">0</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn"> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="sensitive">10</attribute> + <attribute name="markup">1</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="name">build-info</property> + <property name="title" translatable="yes">Build Information</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </template> +</interface>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/credits.json Tue Sep 19 03:14:48 2017 +0000 @@ -0,0 +1,736 @@ +{ + "developers": [{ + "title": "Developers", + "people": [ + "Daniel 'datallah' Atallah", + "Ethan 'Paco-Paco' Blanton", + "Gary 'grim' Kramlich", + "Richard 'rlaager' Laager", + "Etan 'deryni' Reisner", + "Michael 'Maiku' Ruprecht", + "Elliott 'QuLogic' Sales de Andrade", + "Kevin 'SimGuy' Stange", + "Tomasz Wasilczyk", + + "Paul 'darkrain42' Aurich (Retired)", + "John 'rekkanoryo' Bailey (Retired)", + "Herman Bloggs (Retired)", + "Thomas Butter (Retired)", + "Ka-Hing Cheung (Retired)", + "Sadrul Habib Chowdhury (Retired)", + "Mark 'KingAnt' Doliner (Retired)", + "Jim Duchek (Retired)", + "Sean Egan (Retired)", + "Rob Flynn (Retired)", + "Adam Fritzler (Retired)", + "Christian 'ChipX86' Hammond (Retired)", + "Casey Harkins (Retired)", + "Ivan Komarov (Retired)", + "Syd Logan (Retired)", + "Marcus 'malu' Lundblad (Retired)", + "Sulabh 'sulabh_m' Mahajan (Retired)", + "Richard 'wabs' Nelson (Retired)", + "Christopher 'siege' O'Brien (Retired)", + "Bartosz Oler (Retired)", + "Tim 'marv' Rigenbach (Retired)", + "Luke 'LSchiere' Schierer (Retired)", + "Megan 'Cae' Schneider (Retired)", + "Evan Schoenberg (Retired)", + "Jim Seymour (Retired)", + "Mark Spencer (Retired)", + "Will 'resiak' Thompson (Retired)", + "Stu 'nosnilmot' Tomlinson (Retired)", + "Jorge 'Masca' VillaseƱor (Retired)", + "Nathan 'faceprint' Walp (Retired)", + "Eric Warmenhoven (Retired)" + ] + }, { + "title": "Crazy Patch Writers", + "people": [ + "Jakub 'haakon' Adam", + "Eion Robb", + + "Felipe 'shx' Contreras (Retired)", + "Decklin Foster (Retired)", + "Krzysztof Klinikowski (Retired)", + "Peter 'Bleeter' Lawler (Retired)", + "Robert 'Robot101' McQueen (Retired)", + "Benjamin Miller (Retired)", + "Dennis 'EvilDennisR' Ristuccia (Retired)", + "Peter 'Fmoo' Ruibal (Retired)", + "Gabriel 'Nix' Schulhof (Retired)", + "Ankit Vani (Retired)" + ] + }, { + "title": "Artists", + "people": [ + "Hylke Bons" + ] + }, { + "title": "Google Summer of Code 2015", + "people": [ + "Abel Serrano Juste", + "Igor Gajowiak", + "James Geboski", + "Koosha Khajehmoogahi", + "Michael McConville", + "Nakul Gulati" + ] + }, { + "title": "Google Summer of Code 2013", + "people": [ + "Ashish Gupta", + "Bhaskar Kandiyal", + "Phil Hannent", + "Ankit Vani" + ] + }, { + "title": "Google Summer of Code 2012", + "people": [ + "Michael Zangl", + "Nikhil Bafna", + "Sanket Agarwal", + "Tomasz Wasilczyk" + ] + }, { + "title": "Google Summer of Code 2010", + "people": [ + "Ivan Komarov", + "Adam Fowler", + "Gilles Bedel", + "Jorge VillaseƱor Salinas" + ] + }, { + "title": "Google Summer of Code 2009", + "people": [ + "Felix Kerekes", + "Wade Fagen", + "Sulabh Mahajan", + "Eric Polino", + "Gregor Dick", + "Jan Kaluza", + "Arnold Noronha" + ] + }, { + "title": "Google Summer of Code 2008", + "people": [ + "Mark Schneider", + "Justin Rodriguez", + "Vivien Bernet-Rollande", + "Sulabh Mahajan", + "Mike Ruprecht", + "Tobias Markmann" + ] + }, { + "title": "Google Summer of Code 2007", + "people": [ + "Eion Coffey", + "Jeffery Connelly", + "Michael Shkutkov", + "William Ehlhardt", + "Eric Polino", + "Prekshu Ajmera", + "Carlos Silva", + "Will Thompson" + ] + }, { + "title": "Google Summer of Code 2006", + "people": [ + "Sadrul Habib Chowdhury", + "Ma Yuan", + "Geoffrey Foster", + "Brian Chu", + "Mark Huetsch", + "Aaron Sheldon" + ] + }, { + "title": "Google Summer of Code 2005", + "people": [ + "Adam Warrington", + "Bartosz Oler", + "Christian Muise", + "Jonathan Clark", + "Juanjo Molinero Horno", + "Piotr Zielinski", + "Thomas Butter" + ] + }], + "languages": [{ + "title": "Afrikaans (af)", + "people": [ + "Samuel Murray", + "Friedel Wolff" + ] + }, { + "title": "Amharic (am)", + "people": [ + "Daniel Yacob (Retired)" + ] + }, { + "title": "Arabic (ar)", + "people": [ + "Khaled Hosny", + "Mohamed Magdy (Retired)" + ] + }, { + "title": "Assamese (as)", + "people": [ + "Amitakhya Phukan" + ] + }, { + "title": "Asturian (ast)", + "people": [ + "Llumex03" + ] + }, { + "title": "Belarusian Latin (be@latin)", + "people": [ + "Ihar Hrachyshka" + ] + }, { + "title": "Bulgarian (bg)", + "people": [ + "Vladimira Girginova", + "Vladimir (Kaladan) Petkov", + "Hristo Todorov (Retired)" + ] + }, { + "title": "Bengali (bn)", + "people": [ + "Jamil Ahmed", + "Israt Jahan", + "Samia Nimatullah", + "Indranil Das Gupta (Retired)", + "Tisa Nafisa (Retired)" + ] + }, { + "title": "Bengali-India (bn_IN)", + "people": [ + "Runa Bhattacharjee" + ] + }, { + "title": "Breton (br)", + "people": [ + "Gwenn Meynier" + ] + }, { + "title": "Bodo (brx)", + "people": [ + "Chandrakant Dhutadmal" + ] + }, { + "title": "Bosnian (bs)", + "people": [ + "Lejla Hadzialic" + ] + }, { + "title": "Catalan (ca)", + "people": [ + "Josep Puigdemont", + "JM PĆ©rez CĆ”ncer (Retired)", + "Robert Millan (Retired)" + ] + }, { + "title": "Valencian-Catalan (ca@valencia)", + "people": [ + "Toni Hermoso", + "Josep Puigdemont" + ] + }, { + "title": "Czech (cs)", + "people": [ + "David Vachulka", + "Honza KrĆ”l (Retired)", + "Miloslav Trmac (Retired)" + ] + }, { + "title": "Danish (da)", + "people": [ + "Nicky Thomassen", + "Peter Bach (Retired)", + "Morten Brix Pedersen (Retired)" + ] + }, { + "title": "German (de)", + "people": [ + "Bjƶrn Voigt", + "Daniel Seifert (Retired)", + "Karsten Weiss (Retired)", + "Jochen Kemnade (Retired)" + ] + }, { + "title": "Dzongkha (dz)", + "people": [ + "Norbu", + "Jurmey Rabgay", + "Wangmo Sherpa" + ] + }, { + "title": "Greek (el)", + "people": [ + "Katsaloulis Panayotis", + "Panos Bouklis" + ] + }, { + "title": "Australian English (en_AU)", + "people": [ + "Michael Findlay", + "Peter Lawler (Retired)" + ] + }, { + "title": "British English (en_GB)", + "people": [ + "Phil Hannent", + "Luke Ross (Retired)" + ] + }, { + "title": "Canadian English (en_CA)", + "people": [ + "Adam Weinberger" + ] + }, { + "title": "Esperanto (eo)", + "people": [ + "StĆ©phane Fillod" + ] + }, { + "title": "Spanish (es)", + "people": [ + "Javier FernĆ”ndez-Sanguino PeƱa", + "JM PĆ©rez CĆ”ncer (Retired)", + "NicolĆ”s Lichtmaier (Retired)", + "Amaya Rodrigo (Retired)", + "Alejandro G Villar (Retired)" + ] + }, { + "title": "Argentine Spanish (es_AR)", + "people": [ + "KNTRO" + ] + }, { + "title": "Estonian (et)", + "people": [ + "Ivar Smolin" + ] + }, { + "title": "Basque (eu)", + "people": [ + "Mikel Pascual Aldabaldetreku", + "IƱaki LarraƱaga Murgoitio (Retired)", + "Hizkuntza Politikarako Sailburuordetza (Retired)" + ] + }, { + "title": "Persian (fa)", + "people": [ + "Elnaz Sarbar", + "Roozbeh Pournader", + "Meelad Zakaria" + ] + }, { + "title": "Finnish (fi)", + "people": [ + "Timo Jyrinki", + "Arto Alakulju (Retired)", + "Tero Kuusela (Retired)" + ] + }, { + "title": "French (fr)", + "people": [ + "SĆ©bastien FranƧois (Retired)", + "LoĆÆc Jeannin (Retired)", + "StĆ©phane Pontier (Retired)", + "StĆ©phane Wirtel (Retired)", + "Ćric Boumaour (Retired)" + ] + }, { + "title": "Irish (ga)", + "people": [ + "Aaron Kearns", + "Kevin Scannell" + ] + }, { + "title": "Galician (gl)", + "people": [ + "Mar Castro", + "Frco. Javier Rial", + "Ignacio Casal Quinteiro (Retired)" + ] + }, { + "title": "Gujarati (gu)", + "people": [ + "Ankit Patel", + "Gujarati Language Team" + ] + }, { + "title": "Hebrew (he)", + "people": [ + "Shalom Craimer", + "Pavel Bibergal (Retired)" + ] + }, { + "title": "Hindi (hi)", + "people": [ + "Sangeeta Kumari", + "Rajesh Ranjan", + "Ravishankar Shrivastava (Retired)" + ] + }, { + "title": "Croatian (hr)", + "people": [ + "Sabina DrempetiÄ" + ] + }, { + "title": "Hungarian (hu)", + "people": [ + "Kelemen GĆ”bor", + "Zoltan Sutto (Retired)" + ] + }, { + "title": "Armenian (hy)", + "people": [ + "David Avsharyan (Retired)" + ] + }, { + "title": "Indonesian (id)", + "people": [ + "Rai S. Regawa" + ] + }, { + "title": "Italian (it)", + "people": [ + "Claudio Satriano", + "Salvatore di Maggio (Retired)" + ] + }, { + "title": "Japanese (ja)", + "people": [ + "Takayuki Kusano", + "Takashi Aihana (Retired)", + "Ryosuke Kutsuna (Retired)", + "Junichi Uekawa (Retired)", + "Taku Yasui (Retired)" + ] + }, { + "title": "Georgian (ka)", + "people": [ + "Ubuntu Georgian Translators", + "Temuri Doghonadze (Retired)" + ] + }, { + "title": "Kazakh (kk)", + "people": [ + "Baurzhan Muftakhidinov" + ] + }, { + "title": "Khmer (km)", + "people": [ + "Khoem Sokhem" + ] + }, { + "title": "Kannada (kn)", + "people": [ + "Kannada Translation team" + ] + }, { + "title": "Korean (ko)", + "people": [ + "Sushizang", + "Sang-hyun S (Retired)", + "A Ho-seok Lee (Retired)", + "Kyeong-uk Son (Retired)" + ] + }, { + "title": "Kashmiri (kas)", + "people": [ + "Chandrakant Dhutadmal" + ] + }, { + "title": "Kurdish (ku)", + "people": [ + "Amed Ć. Jiyan", + "Erdal Ronahi", + "RizoyĆŖ XerzĆ®" + ] + }, { + "title": "Kurdish (Sorani) (ku_IQ)", + "people": [ + "Haval A. Ahmed" + ] + }, { + "title": "Laotian (lo)", + "people": [ + "Anousak Souphavah (Retired)" + ] + }, { + "title": "Lithuanian (lt)", + "people": [ + "Algimantas MargeviÄius", + "Laurynas Biveinis (Retired)", + "Gediminas ÄiÄinskas (Retired)", + "Andrius Å tikonas (Retired)" + ] + }, { + "title": "Latvian (lv)", + "people": [ + "Rudolfs Mazurs", + "IngmÄrs DÄ«riÅÅ”" + ] + }, { + "title": "Maithili (mai)", + "people": [ + "Sangeeta Kumari", + "Rajesh Ranjan" + ] + }, { + "title": "Meadow Mari (mhr)", + "people": [ + "David Preece" + ] + }, { + "title": "Macedonian (mk)", + "people": [ + "Arangel Angov", + "Ivana Kirkovska", + "Jovan Naumovski", + "Tomislav Markovski (Retired)" + ] + }, { + "title": "Malayalam (ml)", + "people": [ + "Ani Peter" + ] + }, { + "title": "Mongolian (mn)", + "people": [ + "gooyo" + ] + }, { + "title": "Marathi (mr)", + "people": [ + "Sandeep Shedmake" + ] + }, { + "title": "Malay (ms_MY)", + "people": [ + "abuyop", + "Muhammad Najmi bin Ahmad Zabidi (Retired)" + ] + }, { + "title": "Burmese (my_MM)", + "people": [ + "Thura Hlaing" + ] + }, { + "title": "BokmĆ„l Norwegian (nb)", + "people": [ + "Allan NordhĆøy", + "Hans Fredrik Nordhaug (Retired)", + "Hallvard Glad (Retired)", + "Petter Johan Olsen (Retired)", + "Espen Stefansen (Retired)" + ] + }, { + "title": "Nepali (ne)", + "people": [ + "Saroj Dhakal", + "Shyam Krishna Bal (Retired)" + ] + }, { + "title": "Dutch, Flemish (nl)", + "people": [ + "Gideon van Melle", + "Vincent van Adrighem (Retired)" + ] + }, { + "title": "Norwegian Nynorsk (nn)", + "people": [ + "Yngve Spjeld Landro" + ] + }, { + "title": "Occitan (oc)", + "people": [ + "CĆ©dric Valmary", + "Yannig Marchegay (Retired)" + ] + }, { + "title": "Oriya (or)", + "people": [ + "Manoj Kumar Giri" + ] + }, { + "title": "Punjabi (pa)", + "people": [ + "Amanpreet Singh Alam" + ] + }, { + "title": "Polish (pl)", + "people": [ + "Piotr DrÄ g", + "Krzysztof Foltman (Retired)", + "PaweÅ Godlewski (Retired)", + "Piotr Makowski (Retired)", + "Emil Nowak (Retired)", + "PrzemysÅaw SuÅek (Retired)" + ] + }, { + "title": "Portuguese (pt)", + "people": [ + "Paulo Ribeiro", + "Duarte Henriques (Retired)" + ] + }, { + "title": "Portuguese-Brazil (pt_BR)", + "people": [ + "Renato Silva", + "MaurĆcio de Lemos Rodrigues Collares Neto (Retired)", + "Rodrigo Luiz Marques Flores (Retired)" + ] + }, { + "title": "Pashto (ps)", + "people": [ + "Kashif Masood" + ] + }, { + "title": "Romanian (ro)", + "people": [ + "MiČu Moldovan", + "Andrei Popescu" + ] + }, { + "title": "Russian (ru)", + "people": [ + "ŠŠ½Ńон Š”Š°Š¼Š¾Ń Š²Š°Š»Š¾Š²", + "Dmitry Beloglazov (Retired)", + "Alexandre Prokoudine (Retired)", + "Sergey Volozhanin (Retired)" + ] + }, { + "title": "Sindhi (sd)", + "people": [ + "Chandrakant Dhutadmal" + ] + }, { + "title": "Slovak (sk)", + "people": [ + "Jozef KĆ”Äer", + "loptosko", + "Daniel Režný (Retired)", + "Richard Golier (Retired)", + "helix84 (Retired)" + ] + }, { + "title": "Slovenian (sl)", + "people": [ + "Martin Srebotnjak", + "Matjaz Horvat (Retired)" + ] + }, { + "title": "Albanian (sq)", + "people": [ + "Besnik Bleta" + ] + }, { + "title": "Serbian (sr)", + "people": [ + "MiloÅ” PopoviÄ", + "Danilo Å egan (Retired)", + "Aleksandar Urosevic (Retired)" + ] + }, { + "title": "Serbian Latin (sr@latin)", + "people": [ + "MiloÅ” PopoviÄ" + ] + }, { + "title": "Sinhala (si)", + "people": [ + "Yajith Ajantha Dayarathna", + "Danishka Navin" + ] + }, { + "title": "Swedish (sv)", + "people": [ + "Josef Andersson", + "Peter Hjalmarsson (Retired)", + "Tore Lundqvist (Retired)", + "Christian Rose (Retired)" + ] + }, { + "title": "Swahili (sw)", + "people": [ + "Paul Msegeya" + ] + }, { + "title": "Tamil (ta)", + "people": [ + "I. Felix", + "Viveka Nathan K" + ] + }, { + "title": "Telugu (te)", + "people": [ + "Krishnababu Krottapalli", + "Mr. Subbaramaih (Retired)" + ] + }, { + "title": "Thai (th)", + "people": [ + "Isriya Paireepairit" + ] + }, { + "title": "Turkish (tr)", + "people": [ + "Serdar Soytetir (Retired)", + "Ahmet Alp Balkan (Retired)" + ] + }, { + "title": "Tatar (tt)", + "people": [ + "ILDAR Valeev" + ] + }, { + "title": "Ukranian (uk)", + "people": [ + "Oleksandr Kovalenko" + ] + }, { + "title": "Urdu (ur)", + "people": [ + "RKVS Raman" + ] + }, { + "title": "Uzbek (uz)", + "people": [ + "Akmal Khushvakov" + ] + }, { + "title": "Vietnamese (vi)", + "people": [ + "Nguyį» n VÅ© Hʰng", + "T.M.Thanh and the Gnome-Vi Team (Retired)" + ] + }, { + "title": "Simplified Chinese (zh_CN)", + "people": [ + "Aron Xu", + "Hashao (Retired)", + "Rocky S. Lee (Retired)", + "Funda Wang (Retired)" + ] + }, { + "title": "Hong Kong Chinese (zh_HK)", + "people": [ + "Abel Cheung", + "Ambrose C. Li", + "Paladin R. Liu" + ] + }, { + "title": "Traditional Chinese (zh_TW)", + "people": [ + "Ambrose C. Li", + "Paladin R. Liu", + "Hashao (Retired)", + "Rocky S. Lee (Retired)" + ] + }] +}
--- a/pidgin/gtkblist.c Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/gtkblist.c Tue Sep 19 03:14:48 2017 +0000 @@ -59,6 +59,7 @@ #include "gtkblist-theme-loader.h" #include "gtkutils.h" #include "pidgin/minidialog.h" +#include "pidgin/pidginabout.h" #include "pidgin/pidgintooltip.h" #include <gdk/gdkkeysyms.h> @@ -3604,6 +3605,15 @@ /*************************************************** * Crap * ***************************************************/ +static void +_pidgin_about_cb(GtkAction *action, GtkWidget *window) { + GtkWidget *about = pidgin_about_dialog_new(); + + gtk_window_set_transient_for(GTK_WINDOW(about), GTK_WINDOW(window)); + + gtk_widget_show_all(about); +} + /* TODO: fill out tooltips... */ static const GtkActionEntry blist_menu_entries[] = { /* NOTE: Do not set any accelerator to Control+O. It is mapped by @@ -3641,12 +3651,9 @@ /* Help */ { "HelpMenu", NULL, N_("_Help"), NULL, NULL, NULL }, { "OnlineHelp", GTK_STOCK_HELP, N_("Online _Help"), "F1", NULL, gtk_blist_show_onlinehelp_cb }, - { "BuildInformation", NULL, N_("_Build Information"), NULL, NULL, pidgin_dialogs_buildinfo }, { "DebugWindow", NULL, N_("_Debug Window"), NULL, NULL, toggle_debug }, - { "DeveloperInformation", NULL, N_("De_veloper Information"), NULL, NULL, pidgin_dialogs_developers }, { "PluginInformation", NULL, N_("_Plugin Information"), NULL, NULL, pidgin_dialogs_plugins_info }, - { "TranslatorInformation", NULL, N_("_Translator Information"), NULL, NULL, pidgin_dialogs_translators }, - { "About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, pidgin_dialogs_about }, + { "About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, _pidgin_about_cb }, }; /* Toggle items */ @@ -3708,11 +3715,8 @@ "<menu action='HelpMenu'>" "<menuitem action='OnlineHelp'/>" "<separator/>" - "<menuitem action='BuildInformation'/>" "<menuitem action='DebugWindow'/>" - "<menuitem action='DeveloperInformation'/>" "<menuitem action='PluginInformation'/>" - "<menuitem action='TranslatorInformation'/>" "<separator/>" "<menuitem action='About'/>" "</menu>"
--- a/pidgin/gtkdebug.c Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/gtkdebug.c Tue Sep 19 03:14:48 2017 +0000 @@ -40,7 +40,7 @@ #include "gtk3compat.h" -#include "pidgin.gresource.h" +#include "pidginresources.h" typedef struct { @@ -606,7 +606,7 @@ resource = pidgin_get_resource(); error = NULL; resource_bytes = g_resource_lookup_data(resource, - "/im/pidgin/Pidgin/gtkdebug.html", + "/im/pidgin/Pidgin/Debug/gtkdebug.html", G_RESOURCE_LOOKUP_FLAGS_NONE, &error); if (G_UNLIKELY(resource_bytes == NULL || error != NULL)) {
--- a/pidgin/gtkdialogs.c Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/gtkdialogs.c Tue Sep 19 03:14:48 2017 +0000 @@ -55,359 +55,6 @@ char *new_name; }; -struct developer { - char *name; - char *role; - char *email; -}; - -struct translator { - char *language; - char *abbr; - char *name; - char *email; -}; - -struct artist { - char *name; - char *email; -}; - -/* Order: Alphabetical by Last Name */ -static const struct developer developers[] = { - {"Daniel 'datallah' Atallah", NULL, NULL}, - {"Paul 'darkrain42' Aurich", NULL, NULL}, - {"Ethan 'Paco-Paco' Blanton", NULL, NULL}, - {"Hylke Bons", N_("artist"), "hylkebons@gmail.com"}, - {"Sadrul Habib Chowdhury", NULL, NULL}, - {"Gary 'grim' Kramlich", NULL, "grim@pidgin.im"}, - {"Richard 'rlaager' Laager", NULL, "rlaager@pidgin.im"}, - {"Marcus 'malu' Lundblad", NULL, NULL}, - {"Sulabh 'sulabh_m' Mahajan", NULL, NULL}, - {"Richard 'wabz' Nelson", NULL, NULL}, - {"Etan 'deryni' Reisner", NULL, NULL}, - {"Michael 'Maiku' Ruprecht", N_("voice and video"), NULL}, - {"Elliott 'QuLogic' Sales de Andrade", NULL, NULL}, - {"Luke 'LSchiere' Schierer", N_("support"), "lschiere@users.sf.net"}, - {"Evan Schoenberg", NULL, NULL}, - {"Kevin 'SimGuy' Stange", N_("webmaster"), NULL}, - {"Will 'resiak' Thompson", NULL, NULL}, - {"Stu 'nosnilmot' Tomlinson", NULL, NULL}, - {"Jorge 'Masca' VillaseƱor", NULL, NULL}, - {"Tomasz Wasilczyk", NULL, "https://www.wasilczyk.pl"}, - {NULL, NULL, NULL} -}; - -/* Order: Alphabetical by Last Name */ -static const struct developer patch_writers[] = { - {"Jakub 'haakon' Adam", NULL, NULL}, - {"Krzysztof Klinikowski", NULL, NULL}, - {"Eion Robb", NULL, NULL}, - {"Ankit Vani", NULL, NULL}, - {NULL, NULL, NULL} -}; - -/* Order: Alphabetical by Last Name */ -static const struct developer retired_developers[] = { - {"John 'rekkanoryo' Bailey", NULL, NULL}, - {"Herman Bloggs", N_("win32 port"), "herman@bluedigits.com"}, - {"Thomas Butter", NULL, NULL}, - /* Translators: This is a person's name. For most languages we recommend - not translating it. */ - {N_("Ka-Hing Cheung"), NULL, NULL}, - {"Mark 'KingAnt' Doliner", NULL, "mark@kingant.net"}, - {"Jim Duchek", N_("maintainer"), "jim@linuxpimps.com"}, - {"Sean Egan", NULL, "sean.egan@gmail.com"}, - {"Rob Flynn", N_("maintainer"), NULL}, - {"Adam Fritzler", N_("libfaim maintainer"), NULL}, - {"Christian 'ChipX86' Hammond", N_("webmaster"), NULL}, - {"Casey Harkins", NULL, NULL}, - {"Ivan Komarov", NULL, "ivan.komarov@pidgin.im"}, - /* If "lazy bum" translates literally into a serious insult, use something else or omit it. */ - {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL}, - {"Christopher 'siege' O'Brien", NULL, "taliesein@users.sf.net"}, - {"Bartosz Oler", NULL, NULL}, - {"Tim 'marv' Ringenbach", NULL, NULL}, - {"Megan 'Cae' Schneider", N_("support/QA"), NULL}, - {"Jim Seymour", N_("XMPP"), NULL}, - {"Mark Spencer", N_("original author"), "markster@marko.net"}, - {"Nathan 'faceprint' Walp", NULL, NULL}, - {"Eric Warmenhoven", N_("lead developer"), "warmenhoven@yahoo.com"}, - {NULL, NULL, NULL} -}; - -/* Order: Alphabetical by Last Name */ -static const struct developer retired_patch_writers[] = { - {"Felipe 'shx' Contreras", NULL, NULL}, - {"Decklin Foster", NULL, NULL}, - {"Peter 'Bleeter' Lawler", NULL, NULL}, - {"Robert 'Robot101' McQueen", NULL, NULL}, - {"Benjamin Miller", NULL, NULL}, - {"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL}, - {"Peter 'Fmoo' Ruibal", NULL, NULL}, - {"Gabriel 'Nix' Schulhof", NULL, NULL}, - {NULL, NULL, NULL} -}; - -/* Order: Code, then Alphabetical by Last Name - Use NULL language and code for secondary translators. */ -static const struct translator translators[] = { - {N_("Afrikaans"), "af", "Samuel Murray", "afrikaans@gmail.com"}, - {NULL, NULL, "Friedel Wolff", "friedel@translate.org.za"}, - {N_("Arabic"), "ar", "Khaled Hosny", "khaledhosny@eglug.org"}, - {N_("Assamese"), "as", "Amitakhya Phukan", "aphukan@fedoraproject.org"}, - {N_("Asturian"), "ast", "Llumex03", "l.lumex03.tornes@gmail.com"}, - {N_("Belarusian Latin"), "be@latin", "Ihar Hrachyshka", "ihar.hrachyshka@gmail.com"}, - {N_("Bulgarian"), "bg", "Vladimira Girginova", "missing@here.is"}, - {NULL, NULL, "Vladimir (Kaladan) Petkov", "kaladan@gmail.com"}, - {N_("Bengali"), "bn", "Jamil Ahmed", "jamil@bengalinux.org"}, - {NULL, NULL, "Israt Jahan", "israt@ankur.org.bd"}, - {NULL, NULL, "Samia Nimatullah", "mailsamia2001@yahoo.com"}, - {N_("Bengali-India"), "bn_IN", "Runa Bhattacharjee", "runab@fedoraproject.org"}, - {N_("Breton"), "br", "Gwenn Meynier", "tornoz@laposte.net"}, - {N_("Bodo"), "brx", "Chandrakant Dhutadmal", "cpdhutadmal@yahoo.com"}, - {N_("Bosnian"), "bs", "Lejla Hadzialic", "lejlah@gmail.com"}, - {N_("Catalan"), "ca", "Josep Puigdemont", "josep.puigdemont@gmail.com"}, - {N_("Valencian-Catalan"), "ca@valencia", "Toni Hermoso", "toniher@softcatala.org"}, - {NULL, NULL, "Josep Puigdemont", "tradgnome@softcatala.org"}, - {N_("Czech"), "cs", "David Vachulka", "david@konstrukce-cad.com"}, - {N_("Danish"), "da", "Nicky Thomassen", "nicky@aptget.dk"}, - {N_("German"), "de", "Bjƶrn Voigt", "bjoernv@arcor.de"}, - {N_("Dzongkha"), "dz", "Norbu", "nor_den@hotmail.com"}, - {NULL, NULL, "Jurmey Rabgay", "jur_gay@yahoo.com"}, - {NULL, NULL, "Wangmo Sherpa", "rinwanshe@yahoo.com"}, - {N_("Greek"), "el", "Katsaloulis Panayotis", "panayotis@panayotis.com"}, - {NULL, NULL, "Panos Bouklis", "panos@echidna-band.com"}, - {N_("Australian English"), "en_AU", "Michael Findlay", "keltoiboy@gmail.com"}, - {N_("British English"), "en_GB", "Phil Hannent", "phil@hannent.co.uk"}, - {N_("Canadian English"), "en_CA", "Adam Weinberger", "adamw@gnome.org"}, - {N_("Esperanto"), "eo", "StĆ©phane Fillod", "fillods@users.sourceforge.net"}, - {N_("Spanish"), "es", "Javier FernĆ”ndez-Sanguino PeƱa", "jfs@debian.org"}, - {N_("Argentine Spanish"), "es_AR", "KNTRO", "kntro@msn.com"}, - {N_("Estonian"), "et", "Ivar Smolin", "okul@linux.ee"}, - {N_("Basque"), "eu", "Mikel Pascual Aldabaldetreku", "mikel.paskual@gmail.com"}, - {N_("Persian"), "fa", "Elnaz Sarbar", "elnaz@farsiweb.info"}, - {NULL, NULL, "Roozbeh Pournader", "roozbeh@farsiweb.info"}, - {NULL, NULL, "Meelad Zakaria", "meelad@farsiweb.info"}, - {N_("Finnish"), "fi", "Timo Jyrinki", "timo.jyrinki@iki.fi"}, - {N_("Irish"), "ga", "Aaron Kearns", "ajkearns6@gmail.com"}, - {N_("Irish"), "ga", "Kevin Scannell", NULL}, - {N_("Galician"), "gl", "Mar Castro", "mariamarcp@gmail.com"}, - {NULL, NULL, "Frco. Javier Rial", "fjrial@cesga.es"}, - {N_("Gujarati"), "gu", "Ankit Patel", "ankit_patel@users.sf.net"}, - {NULL, NULL, N_("Gujarati Language Team"), "indianoss-gujarati@lists.sourceforge.net"}, - {N_("Hebrew"), "he", "Shalom Craimer", "scraimer@gmail.com"}, - {N_("Hindi"), "hi", "Sangeeta Kumari", "sangeeta_0975@yahoo.com"}, - {NULL, NULL, "Rajesh Ranjan", "rajeshkajha@yahoo.com"}, - {N_("Croatian"), "hr", "Sabina DrempetiÄ", "bina91991@googlemail.com"}, - {N_("Hungarian"), "hu", "Kelemen GĆ”bor", "kelemeng@gnome.hu"}, - {N_("Indonesian"), "id", "Rai S. Regawa", "raireg@yahoo.com"}, - {N_("Italian"), "it", "Claudio Satriano", "satriano@gmail.com"}, - {N_("Japanese"), "ja", "Takayuki Kusano", "AE5T-KSN@asahi-net.or.jp"}, - {N_("Georgian"), "ka", N_("Ubuntu Georgian Translators"), "alexander.didebulidze@stusta.mhn.de"}, - {N_("Kazakh"), "kk", "Baurzhan Muftakhidinov", "baurthefirst@gmail.com"}, - {N_("Khmer"), "km", "Khoem Sokhem", "khoemsokhem@khmeros.info"}, - {N_("Kannada"), "kn", N_("Kannada Translation team"), "translation@sampada.info"}, - {N_("Korean"), "ko", "Sushizang", "sushizang@empal.com"}, - {N_("Kashmiri"), "kas", "Chandrakant Dhutadmal", "cpdhutadmal@yahoo.com"}, - {N_("Kurdish"), "ku", "Amed Ć. Jiyan", "amedcj@hotmail.com"}, - {NULL, NULL, "Erdal Ronahi", "erdal.ronahi@gmail.com"}, - {NULL, NULL, "RizoyĆŖ XerzĆ®", "rizoxerzi@hotmail.com"}, - {N_("Kurdish (Sorani)"), "ku_IQ", "Haval A. Ahmed", "haval.abdulkarim@gmail.com"}, - {N_("Lithuanian"), "lt", "Algimantas MargeviÄius", "margevicius.algimantas@gmail.com"}, - {N_("Latvian"), "lv", "Rudolfs Mazurs", "rudolfs.mazurs@gmail.com"}, - {N_("Latvian"), "lv", "IngmÄrs DÄ«riÅÅ”", "melhiors14@gmail.com"}, - {N_("Maithili"), "mai", "Sangeeta Kumari", "sangeeta_0975@yahoo.com"}, - {NULL, NULL, "Rajesh Ranjan", "rajeshkajha@yahoo.com"}, - {N_("Meadow Mari"), "mhr", "David Preece", "davidpreece1@gmail.com"}, - {N_("Macedonian"), "mk", "Arangel Angov ", "arangel@linux.net.mk"}, - {NULL, NULL, "Ivana Kirkovska", "ivana.kirkovska@gmail.com"}, - {NULL, NULL, "Jovan Naumovski", "jovan@lugola.net"}, - {N_("Malayalam"), "ml", "Ani Peter", "apeter@redhat.com"}, - {N_("Mongolian"), "mn", "gooyo", NULL}, - {N_("Marathi"), "mr", "Sandeep Shedmake", "sandeep.shedmake@gmail.com"}, - {N_("Malay"), "ms_MY", "abuyop", "abuyop@gmail.com"}, - {N_("Burmese"), "my_MM", "Thura Hlaing", "trhura@gmail.com"}, - {N_("BokmĆ„l Norwegian"), "nb", "Allan NordhĆøy", "epost@anotheragency.no"}, - {N_("Nepali"), "ne", "Saroj Dhakal", "lotusnagarkot@gmail.com"}, - {N_("Dutch, Flemish"), "nl", "Gideon van Melle", "translations@gvmelle.com"}, - {N_("Norwegian Nynorsk"), "nn", "Yngve Spjeld Landro", "l10n@landro.net"}, - {N_("Occitan"), "oc", "CĆ©dric Valmary", "cvalmary@yahoo.fr"}, - {N_("Oriya"), "or", "Manoj Kumar Giri", "giri.manojkr@gmail.com"}, - {N_("Punjabi"), "pa", "Amanpreet Singh Alam", "aalam@users.sf.net"}, - {N_("Polish"), "pl", "Piotr DrÄ g", "piotrdrag@gmail.com"}, - {N_("Portuguese"), "pt", "Paulo Ribeiro", "paulo@diffraction.pt"}, - {N_("Portuguese-Brazil"), "pt_BR", "Renato Silva", "br.renatosilva@gmail.com"}, - {N_("Pashto"), "ps", "Kashif Masood", "masudmails@yahoo.com"}, - {N_("Romanian"), "ro", "MiČu Moldovan", "dumol@gnome.org"}, - {NULL, NULL, "Andrei Popescu", "andreimpopescu@gmail.com"}, - {N_("Russian"), "ru", "ŠŠ½Ńон Š”Š°Š¼Š¾Ń Š²Š°Š»Š¾Š²", "samant.ua@mail.ru"}, - {N_("Sindhi"), "sd", "Chandrakant Dhutadmal", "cpdhutadmal@yahoo.com"}, - {N_("Slovak"), "sk", "Jozef KĆ”Äer", "quickparser@gmail.com"}, - {NULL, NULL, "loptosko", "loptosko@gmail.com"}, - {N_("Slovenian"), "sl", "Martin Srebotnjak", "miles@filmsi.net"}, - {N_("Albanian"), "sq", "Besnik Bleta", "besnik@programeshqip.org"}, - {N_("Serbian"), "sr", "MiloÅ” PopoviÄ", "gpopac@gmail.com"}, - {N_("Serbian Latin"), "sr@latin", "MiloÅ” PopoviÄ", "gpopac@gmail.com"}, - {N_("Sinhala"), "si", "Yajith Ajantha Dayarathna", "yajith@gmail.com"}, - {NULL, NULL, "Danishka Navin", "snavin@redhat.com"}, - {N_("Swedish"), "sv", "Josef Andersson", "josef.andersson@gmail.com"}, - {N_("Swahili"), "sw", "Paul Msegeya", "msegeya@gmail.com"}, - {N_("Tamil"), "ta", "I. Felix", "ifelix25@gmail.com"}, - {NULL, NULL, "Viveka Nathan K", "vivekanathan@users.sourceforge.net"}, - {N_("Telugu"), "te", "Krishnababu Krottapalli", "krottapalli@ymail.com"}, - {N_("Thai"), "th", "Isriya Paireepairit", "markpeak@gmail.com"}, - {N_("Tatar"), "tt", "ILDAR Valeev", "v_ildar@bk.ru"}, - {N_("Ukranian"), "uk", "Oleksandr Kovalenko", "alx.kovalenko@gmail.com"}, - {N_("Urdu"), "ur", "RKVS Raman", "rkvsraman@gmail.com"}, - {N_("Uzbek"), "uz", - /* Translators: This is a person's name. For most languages we recommend - not translating it. */ - N_("Akmal Khushvakov"), "uzbadmin@gmail.com"}, - {N_("Vietnamese"), "vi", "Nguyį» n VÅ© Hʰng", "vuhung16plus@gmail.com"}, - {N_("Simplified Chinese"), "zh_CN", "Aron Xu", "happyaron.xu@gmail.com"}, - {N_("Hong Kong Chinese"), "zh_HK", "Abel Cheung", "abelindsay@gmail.com"}, - {NULL, NULL, "Ambrose C. Li", "acli@ada.dhs.org"}, - {NULL, NULL, "Paladin R. Liu", "paladin@ms1.hinet.net"}, - {N_("Traditional Chinese"), "zh_TW", "Ambrose C. Li", "acli@ada.dhs.org"}, - {NULL, NULL, "Paladin R. Liu", "paladin@ms1.hinet.net"}, - {NULL, NULL, NULL, NULL} -}; - - -static const struct translator past_translators[] = { - {N_("Amharic"), "am", "Daniel Yacob", NULL}, - {N_("Arabic"), "ar", "Mohamed Magdy", NULL}, - {N_("Bulgarian"), "bg", "Hristo Todorov", NULL}, - {N_("Bengali"), "bn", "Indranil Das Gupta", NULL}, - {NULL, NULL, "Tisa Nafisa", NULL}, - {N_("Catalan"), "ca", "JM PĆ©rez CĆ”ncer", NULL}, - {NULL, NULL, "Robert Millan", NULL}, - {N_("Czech"), "cs", "Honza KrĆ”l", NULL}, - {NULL, NULL, "Miloslav Trmac", NULL}, - {N_("Danish"), "da", "Peter Bach", NULL}, - {NULL, NULL, "Morten Brix Pedersen", NULL}, - {N_("German"), "de", "Daniel Seifert", NULL}, - {NULL, NULL, "Karsten Weiss", NULL}, - {NULL, NULL, "Jochen Kemnade", NULL}, - {N_("Australian English"), "en_AU", "Peter Lawler", NULL}, - {N_("British English"), "en_GB", "Luke Ross", NULL}, - {N_("Spanish"), "es", "JM PĆ©rez CĆ”ncer", NULL}, - {NULL, NULL, "NicolĆ”s Lichtmaier", NULL}, - {NULL, NULL, "Amaya Rodrigo", NULL}, - {NULL, NULL, "Alejandro G Villar", NULL}, - {N_("Basque"), "eu", "IƱaki LarraƱaga Murgoitio", NULL}, - {NULL, NULL, "Hizkuntza Politikarako Sailburuordetza", NULL}, - {N_("Finnish"), "fi", "Arto Alakulju", NULL}, - {NULL, NULL, "Tero Kuusela", NULL}, - {N_("French"), "fr", "SĆ©bastien FranƧois", NULL}, - {NULL, NULL, "LoĆÆc Jeannin", NULL}, - {NULL, NULL, "StĆ©phane Pontier", NULL}, - {NULL, NULL, "StĆ©phane Wirtel", NULL}, - {NULL, NULL, "Ćric Boumaour", NULL}, - {N_("Galician"), "gl", "Ignacio Casal Quinteiro", NULL}, - {N_("Hebrew"), "he", "Pavel Bibergal", NULL}, - {N_("Hindi"), "hi", "Ravishankar Shrivastava", NULL}, - {N_("Hungarian"), "hu", "Zoltan Sutto", NULL}, - {N_("Armenian"), "hy", "David Avsharyan", NULL}, - {N_("Italian"), "it", "Salvatore di Maggio", NULL}, - {N_("Japanese"), "ja", "Takashi Aihana", NULL}, - {NULL, NULL, "Ryosuke Kutsuna", NULL}, - {NULL, NULL, "Junichi Uekawa", NULL}, - {NULL, NULL, "Taku Yasui", NULL}, - {N_("Georgian"), "ka", "Temuri Doghonadze", NULL}, - {N_("Korean"), "ko", "Sang-hyun S", NULL}, - {NULL, NULL, "A Ho-seok Lee", NULL}, - {NULL, NULL, "Kyeong-uk Son", NULL}, - {N_("Lao"), "lo", "Anousak Souphavah", NULL}, - {N_("Lithuanian"), "lt", "Laurynas Biveinis", NULL}, - {NULL, NULL, "Gediminas ÄiÄinskas", NULL}, - {NULL, NULL, "Andrius Å tikonas", NULL}, - {N_("Macedonian"), "mk", "Tomislav Markovski", NULL}, - {N_("Malay"), "ms_MY", "Muhammad Najmi bin Ahmad Zabidi", NULL}, - {N_("BokmĆ„l Norwegian"), "nb", "Hans Fredrik Nordhaug", NULL}, - {NULL, NULL, "Hallvard Glad", NULL}, - {NULL, NULL, "Petter Johan Olsen", NULL}, - {NULL, NULL, "Espen Stefansen", NULL}, - {N_("Nepali"), "ne", "Shyam Krishna Bal", NULL}, - {N_("Dutch, Flemish"), "nl", "Vincent van Adrighem", NULL}, - {N_("Occitan"), "oc", "Yannig Marchegay", NULL}, - {N_("Polish"), "pl", "Krzysztof Foltman", NULL}, - {NULL, NULL, "PaweÅ Godlewski", NULL}, - {NULL, NULL, "Piotr Makowski", NULL}, - {NULL, NULL, "Emil Nowak", NULL}, - {NULL, NULL, "PrzemysÅaw SuÅek", NULL}, - {N_("Portuguese"), "pt", "Duarte Henriques", NULL}, - {N_("Portuguese-Brazil"), "pt_BR", "MaurĆcio de Lemos Rodrigues Collares Neto", NULL}, - {N_("Portuguese-Brazil"), "pt_BR", "Rodrigo Luiz Marques Flores", NULL}, - {N_("Russian"), "ru", "Dmitry Beloglazov", NULL}, - {NULL, NULL, "Alexandre Prokoudine", NULL}, - {NULL, NULL, "Sergey Volozhanin", NULL}, - {N_("Slovak"), "sk", "Daniel Režný", NULL}, - {NULL, NULL, "Richard Golier", NULL}, - {NULL, NULL, "helix84", NULL}, - {N_("Slovenian"), "sl", "Matjaz Horvat", NULL}, - {N_("Serbian"), "sr", "Danilo Å egan", NULL}, - {NULL, NULL, "Aleksandar Urosevic", NULL}, - {N_("Swedish"), "sv", "Peter Hjalmarsson", NULL}, - {N_("Swedish"), NULL, "Tore Lundqvist", NULL}, - {NULL, NULL, "Christian Rose", NULL}, - {N_("Telugu"), "te", "Mr. Subbaramaih", NULL}, - {N_("Turkish"), "tr", "Serdar Soytetir", NULL}, - {NULL, "tr", "Ahmet Alp Balkan", NULL}, - {N_("Vietnamese"), "vi", N_("T.M.Thanh and the Gnome-Vi Team"), NULL}, - {N_("Simplified Chinese"), "zh_CN", "Hashao", NULL}, - {NULL, NULL, "Rocky S. Lee", NULL}, - {NULL, NULL, "Funda Wang", NULL}, - {N_("Traditional Chinese"), "zh_TW", "Hashao", NULL}, - {NULL, NULL, "Rocky S. Lee", NULL}, - {NULL, NULL, NULL, NULL} -}; - -static void -add_developers(GString *str, const struct developer *list) -{ - for (; list->name != NULL; list++) { - if (list->email != NULL) { - const gchar *proto = "mailto:"; - if (strchr(list->email, ':') != NULL) - proto = ""; - g_string_append_printf(str, - "<li><a href=\"%s%s\" title=\"%s\">%s</a>%s%s%s</li>", - proto, - list->email, list->email, _(list->name), - list->role ? " (" : "", - list->role ? _(list->role) : "", - list->role ? ")" : ""); - } else { - g_string_append_printf(str, "<li>%s%s%s%s</li>", - _(list->name), - list->role ? " (" : "", - list->role ? _(list->role) : "", - list->role ? ")" : ""); - } - } -} - -static void -add_translators(GString *str, const struct translator *list) -{ - for (; list->name != NULL; list++) { - if (list->language && list->abbr) { - g_string_append_printf(str, "<dt>%s (%s)</dt>", - _(list->language), list->abbr); - } - if (list->email != NULL) { - g_string_append_printf(str, - "<dd><a href=\"mailto:%s\" title=\"%s\">%s</a></dd>", - list->email, list->email, - _(list->name)); - } else { - g_string_append_printf(str, "<dd>%s</dd>", _(list->name)); - } - } -} - void pidgin_dialogs_destroy_all() { @@ -515,290 +162,6 @@ return win; } -void pidgin_dialogs_about(void) -{ - GString *str; - char *tmp; - static GtkWidget *about = NULL; - - if (about != NULL) { - gtk_window_present(GTK_WINDOW(about)); - return; - } - - str = g_string_sized_new(4096); - - g_string_append_printf(str, - "<h2>%s %s</h2>" - "<strong>(libpurple %s)<br/>%s</strong>", - PIDGIN_NAME, DISPLAY_VERSION, - purple_core_get_version(), REVISION); - - g_string_append_printf(str, - _("<p>%s is a messaging client based on libpurple which is capable of " - "connecting to multiple messaging services at once. %s is written " - "in C using GTK+. %s is released, and may be modified and " - "redistributed, under the terms of the GPL version 2 (or later). " - "A copy of the GPL is distributed with %s. %s is copyrighted by " - "its contributors, a list of whom is also distributed with %s. " - "There is no warranty for %s.</p>"), PIDGIN_NAME, PIDGIN_NAME, - PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME, PIDGIN_NAME); - - g_string_append_printf(str, - _("<h3>Helpful Resources</h3>" - "<ul>" - "<li><a href=\"%s\" title=\"%s\">Website</a></li>" - "<li><a href=\"%s\" title=\"%s\">Frequently Asked Questions</a></li>" - "<li>IRC Channel: #pidgin on irc.freenode.net</li>" - "<li>XMPP MUC: devel@conference.pidgin.im</li>" - "</ul>"), - PURPLE_WEBSITE, PURPLE_WEBSITE, - "https://developer.pidgin.im/wiki/FAQ", - "https://developer.pidgin.im/wiki/FAQ"); - - g_string_append(str, - "<p><strong>Help for Oracle Employees</strong> is " - "available from your normal internal helpdesk or IT department. " - "The Pidgin developer and user communities cannot assist you in " - "the configuration or use of Pidgin within Oracle, as we know " - "nothing of Oracle's infrastructure.</p>"); - - g_string_append_printf(str, - _("<p><strong>Help from other Pidgin users</strong> is available " - "by e-mailing <a href=\"mailto:%s\">%s</a>.<br/>" - "This is a <strong>public</strong> mailing list! " - "(<a href=\"%s\" title=\"%s\">archive</a>)<br/>" - "We can't help with third-party protocols or plugins!<br/>" - "This list's primary language is English. You " - "are welcome to post in another language, but the responses may " - "be less helpful.</p>"), - "support@pidgin.im", "support@pidgin.im", - "https://pidgin.im/pipermail/support/", - "https://pidgin.im/pipermail/support/"); - - tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME); - about = pidgin_build_help_dialog(tmp, "about", str); - g_signal_connect(G_OBJECT(about), "destroy", G_CALLBACK(gtk_widget_destroyed), &about); - g_free(tmp); -} - -void pidgin_dialogs_buildinfo(void) -{ - GString *str; - char *tmp; - static GtkWidget *buildinfo = NULL; - - if (buildinfo != NULL) { - gtk_window_present(GTK_WINDOW(buildinfo)); - return; - } - - str = g_string_sized_new(4096); - - g_string_append_printf(str, - "<h2>%s %s</h2>" - "<strong>(libpurple %s)<br/>%s</strong>", - PIDGIN_NAME, DISPLAY_VERSION, purple_core_get_version(), REVISION); - - g_string_append_printf(str, "<h3>%s</h3><dl>", _("Build Information")); - - /* The following is primarily intended for user/developer interaction and - thus ought not be translated */ - -#ifdef CONFIG_ARGS /* win32 build doesn't use configure */ - g_string_append(str, "<dt>Arguments to <em>./configure</em>:</dt><dd>" CONFIG_ARGS "</dd>"); -#endif -#ifdef MESON_ARGS - g_string_append(str, "<dt>Arguments to <em>meson</em>:</dt><dd>" MESON_ARGS "</dd>"); -#endif - -#ifndef _WIN32 -#ifdef DEBUG - g_string_append(str, "<dt>Print debugging messages:</dt><dd>Yes</dd>"); -#else - g_string_append(str, "<dt>Print debugging messages:</dt><dd>No</dd>"); -#endif -#endif - -#ifdef PURPLE_PLUGINS - g_string_append(str, "<dt>Plugins:</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>Plugins:</dt><dd>Disabled</dd>"); -#endif - - g_string_append(str, "<dt>SSL:</dt><dd>SSL support is present.</dd>"); - - g_string_append_printf(str, "<dt>GTK+ Runtime:</dt><dd>%u.%u.%u</dd>" - "<dt>GLib Runtime:</dt><dd>%u.%u.%u</dd>", - gtk_major_version, gtk_minor_version, gtk_micro_version, - glib_major_version, glib_minor_version, glib_micro_version); - - g_string_append(str, "</dl><h3>Library Support</h3><dl>"); - -#ifdef HAVE_CYRUS_SASL - g_string_append_printf(str, "<dt>Cyrus SASL:</dt><dd>Enabled</dd>"); -#else - g_string_append_printf(str, "<dt>Cyrus SASL:</dt><dd>Disabled</dd>"); -#endif - -#ifndef _WIN32 -#ifdef HAVE_DBUS - g_string_append_printf(str, "<dt>D-Bus:</dt><dd>Enabled</dd>"); -#else - g_string_append_printf(str, "<dt>D-Bus:</dt><dd>Disabled</dd>"); -#endif - -#ifdef HAVE_EVOLUTION_ADDRESSBOOK - g_string_append_printf(str, "<dt>Evolution Addressbook:</dt><dd>Enabled</dd>"); -#else - g_string_append_printf(str, "<dt>Evolution Addressbook:</dt><dd>Disabled</dd>"); -#endif -#endif - -#ifdef HAVE_LIBGADU - g_string_append(str, "<dt>Gadu-Gadu library (libgadu):</dt><dd>External</dd>"); -#else - g_string_append(str, "<dt>Gadu-Gadu library (libgadu):</dt><dd>Internal</dd>"); -#endif - -#ifdef HAVE_GNUTLS - g_string_append(str, "<dt>GnuTLS:</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>GnuTLS:</dt><dd>Disabled</dd>"); -#endif - -#ifdef USE_GSTREAMER - tmp = gst_version_string(); - g_string_append_printf(str, "<dt>GStreamer:</dt><dd>%s</dd>", tmp); - g_free(tmp); -#else - g_string_append(str, "<dt>GStreamer:</dt><dd>Disabled</dd>"); -#endif - -#ifndef _WIN32 -#ifdef ENABLE_MONO - g_string_append(str, "<dt>Mono:</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>Mono:</dt><dd>Disabled</dd>"); -#endif -#endif - -#ifdef HAVE_NSS - g_string_append(str, "<dt>Network Security Services (NSS):</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>Network Security Services (NSS):</dt><dd>Disabled</dd>"); -#endif - -#ifdef USE_IDN - g_string_append(str, "<dt>UTF-8 DNS (IDN):</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>UTF-8 DNS (IDN):</dt><dd>Disabled</dd>"); -#endif - -#ifdef USE_VV - g_string_append(str, "<dt>Voice and Video:</dt><dd>Enabled</dd>"); -#else - g_string_append(str, "<dt>Voice and Video:</dt><dd>Disabled</dd>"); -#endif - -#ifndef _WIN32 -#ifdef LIBZEPHYR_EXT - g_string_append(str, "<dt>Zephyr library (libzephyr):</dt><dd>External</dd>"); -#else - g_string_append(str, "<dt>Zephyr library (libzephyr):</dt><dd>Internal</dd>"); -#endif - -#ifdef ZEPHYR_USES_KERBEROS - g_string_append(str, "<dt>Zephyr uses Kerberos:</dt><dd>Yes</dd>"); -#else - g_string_append(str, "<dt>Zephyr uses Kerberos:</dt><dd>No</dd>"); -#endif -#endif - - g_string_append(str, "</dl>"); - - /* End of not to be translated section */ - - tmp = g_strdup_printf(_("%s Build Information"), PIDGIN_NAME); - buildinfo = pidgin_build_help_dialog(tmp, "buildinfo", str); - g_signal_connect(G_OBJECT(buildinfo), "destroy", G_CALLBACK(gtk_widget_destroyed), &buildinfo); - g_free(tmp); -} - -void pidgin_dialogs_developers(void) -{ - GString *str; - char *tmp; - static GtkWidget *developer_info = NULL; - - if (developer_info != NULL) { - gtk_window_present(GTK_WINDOW(developer_info)); - return; - } - - str = g_string_sized_new(4096); - - /* Current Developers */ - g_string_append_printf(str, "<h3>%s</h3><ul>", - _("Current Developers")); - add_developers(str, developers); - g_string_append(str, "</ul>"); - - /* Crazy Patch Writers */ - g_string_append_printf(str, "<h3>%s</h3><ul>", - _("Crazy Patch Writers")); - add_developers(str, patch_writers); - g_string_append(str, "</ul>"); - - /* Retired Developers */ - g_string_append_printf(str, "<h3>%s</h3><ul>", - _("Retired Developers")); - add_developers(str, retired_developers); - g_string_append(str, "</ul>"); - - /* Retired Crazy Patch Writers */ - g_string_append_printf(str, "<h3>%s</h3><ul>", - _("Retired Crazy Patch Writers")); - add_developers(str, retired_patch_writers); - g_string_append(str, "</ul>"); - - tmp = g_strdup_printf(_("%s Developer Information"), PIDGIN_NAME); - developer_info = pidgin_build_help_dialog(tmp, "developer_info", str); - g_signal_connect(G_OBJECT(developer_info), "destroy", G_CALLBACK(gtk_widget_destroyed), &developer_info); - g_free(tmp); -} - -void pidgin_dialogs_translators(void) -{ - GString *str; - char *tmp; - static GtkWidget *translator_info = NULL; - - if (translator_info != NULL) { - gtk_window_present(GTK_WINDOW(translator_info)); - return; - } - - str = g_string_sized_new(4096); - - /* Current Translators */ - g_string_append_printf(str, "<h3>%s</h3><dl>", - _("Current Translators")); - add_translators(str, translators); - g_string_append(str, "</dl>"); - - /* Past Translators */ - g_string_append_printf(str, "<h3>%s</h3><dl>", - _("Past Translators")); - add_translators(str, past_translators); - g_string_append(str, "</dl>"); - - tmp = g_strdup_printf(_("%s Translator Information"), PIDGIN_NAME); - translator_info = pidgin_build_help_dialog(tmp, "translator_info", str); - g_signal_connect(G_OBJECT(translator_info), "destroy", G_CALLBACK(gtk_widget_destroyed), &translator_info); - g_free(tmp); -} - void pidgin_dialogs_plugins_info(void) { GString *str;
--- a/pidgin/gtkdialogs.h Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/gtkdialogs.h Tue Sep 19 03:14:48 2017 +0000 @@ -37,10 +37,6 @@ /* Functions in gtkdialogs.c (these should actually stay in this file) */ void pidgin_dialogs_destroy_all(void); -void pidgin_dialogs_about(void); -void pidgin_dialogs_buildinfo(void); -void pidgin_dialogs_developers(void); -void pidgin_dialogs_translators(void); void pidgin_dialogs_plugins_info(void); void pidgin_dialogs_im(void); void pidgin_dialogs_im_with_user(PurpleAccount *, const char *);
--- a/pidgin/meson.build Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/meson.build Tue Sep 19 03:14:48 2017 +0000 @@ -42,7 +42,8 @@ 'gtkxfer.c', 'libpidgin.c', 'minidialog.c', - 'pidgintooltip.c' + 'pidginabout.c', + 'pidgintooltip.c', ] libpidgin_headers = [ @@ -90,15 +91,16 @@ 'gtkwhiteboard.h', 'gtkxfer.h', 'minidialog.h', + 'pidginabout.h', 'pidgintooltip.h', - 'pidgin.h' + 'pidgin.h', ] pidgin_SOURCES = [ 'pidgin.c' ] -pidgin_resource = gnome.compile_resources('pidgin.gresource', 'pidgin.gresource.xml', +pidgin_resource = gnome.compile_resources('pidginresources', 'pidgin.gresource.xml', c_name : 'pidgin') libpidgin_SOURCES += pidgin_resource @@ -149,7 +151,20 @@ libpidgin_SOURCES, include_directories : [toplevel_inc], version : PURPLE_LIB_VERSION, - dependencies : [gtk, gstreamer_video, webkit, enchant, dbus, x11, GCR, IOKIT, libpurple_dep, glib, math], + dependencies : [ + dbus, + enchant, + GCR, + glib, + gstreamer_video, + gtk, + IOKIT, + json, + math, + webkit, + x11, + libpurple_dep, + ], install : true) libpidgin_dep = declare_dependency( include_directories : [toplevel_inc, libpidgin_inc],
--- a/pidgin/pidgin.gresource.xml Tue Sep 19 01:26:38 2017 +0000 +++ b/pidgin/pidgin.gresource.xml Tue Sep 19 03:14:48 2017 +0000 @@ -1,6 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <gresources> - <gresource prefix="/im/pidgin/Pidgin"> + <gresource prefix="/im/pidgin/Pidgin/"> + <file>logo.png</file> + </gresource> + <gresource prefix="/im/pidgin/Pidgin/Debug"> <file compressed="true">gtkdebug.html</file> </gresource> + <gresource prefix="/im/pidgin/Pidgin/About"> + <file compressed="true">about.ui</file> + <file compressed="true">about.html</file> + <file compressed="true">credits.json</file> + </gresource> </gresources>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pidginabout.c Tue Sep 19 03:14:48 2017 +0000 @@ -0,0 +1,488 @@ +/* Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA + */ +#include <gdk-pixbuf/gdk-pixbuf.h> +#include <json-glib/json-glib.h> + +#include "package_revision.h" +#include "pidginabout.h" +#include "pidginresources.h" +#include "internal.h" +#include "gtkutils.h" +#include "gtkwebview.h" + +#include <stdio.h> + +#ifdef HAVE_MESON_CONFIG +#include "meson-config.h" +#endif + +struct _PidginAboutDialog { + GtkDialog parent; + + /*< private >*/ + PidginAboutDialogPrivate *priv; +}; + +struct _PidginAboutDialogClass { + GtkDialogClass parent; + + void (*_pidgin_reserved1)(void); + void (*_pidgin_reserved2)(void); + void (*_pidgin_reserved3)(void); + void (*_pidgin_reserved4)(void); +}; + +struct _PidginAboutDialogPrivate { + GtkWidget *close_button; + GtkWidget *application_name; + GtkWidget *stack; + + GtkWidget *main_scrolled_window; + + GtkWidget *developers_page; + GtkWidget *developers_treeview; + GtkTreeStore *developers_store; + + GtkWidget *translators_page; + GtkWidget *translators_treeview; + GtkTreeStore *translators_store; + + GtkWidget *build_info_page; + GtkWidget *build_info_treeview; + GtkTreeStore *build_info_store; +}; + +/****************************************************************************** + * Helpers + *****************************************************************************/ +static void +_pidgin_about_dialog_load_application_name(PidginAboutDialog *about) { + gchar *label = g_strdup_printf( + "%s %s", + PIDGIN_NAME, + VERSION + ); + + gtk_label_set_text(GTK_LABEL(about->priv->application_name), label); + + g_free(label); +} + +static void +_pidgin_about_dialog_load_main_page(PidginAboutDialog *about) { + GtkWidget *webview = NULL; + GInputStream *istream = NULL; + GString *str = NULL; + gchar buffer[8192]; + gssize read = 0; + + /* create our webview */ + webview = pidgin_webview_new(FALSE); + pidgin_setup_webview(webview); + pidgin_webview_set_format_functions(PIDGIN_WEBVIEW(webview), PIDGIN_WEBVIEW_ALL ^ PIDGIN_WEBVIEW_SMILEY); + + gtk_container_add(GTK_CONTAINER(about->priv->main_scrolled_window), webview); + + /* now load the html */ + istream = g_resource_open_stream( + pidgin_get_resource(), + "/im/pidgin/Pidgin/About/about.html", + G_RESOURCE_LOOKUP_FLAGS_NONE, + NULL + ); + + str = g_string_new(""); + + while((read = g_input_stream_read(istream, buffer, sizeof(buffer), NULL, NULL)) > 0) { + g_string_append_len(str, (gchar *)buffer, read); + } + + pidgin_webview_append_html(PIDGIN_WEBVIEW(webview), str->str); + + g_string_free(str, TRUE); + + g_input_stream_close(istream, NULL, NULL); +} + +static void +_pidgin_about_dialog_load_json(GtkTreeStore *store, const gchar *json_section) { + GInputStream *istream = NULL; + GList *l = NULL, *sections = NULL; + GError *error = NULL; + JsonParser *parser = NULL; + JsonNode *root_node = NULL; + JsonObject *root_object = NULL; + JsonArray *sections_array = NULL; + + /* get a stream to the credits resource */ + istream = g_resource_open_stream( + pidgin_get_resource(), + "/im/pidgin/Pidgin/About/credits.json", + G_RESOURCE_LOOKUP_FLAGS_NONE, + NULL + ); + + /* create our parser */ + parser = json_parser_new(); + + if(!json_parser_load_from_stream(parser, istream, NULL, &error)) { + g_critical("%s", error->message); + } + + root_node = json_parser_get_root(parser); + root_object = json_node_get_object(root_node); + + sections_array = json_object_get_array_member(root_object, json_section); + sections = json_array_get_elements(sections_array); + + for(l = sections; l; l = l->next) { + GtkTreeIter section_iter; + JsonObject *section = json_node_get_object(l->data); + JsonArray *people = NULL; + gchar *markup = NULL; + guint idx = 0, n_people = 0; + + markup = g_strdup_printf( + "<span font_weight=\"bold\" font_size=\"large\">%s</span>", + json_object_get_string_member(section, "title") + ); + + gtk_tree_store_append(store, §ion_iter, NULL); + gtk_tree_store_set( + store, + §ion_iter, + 0, markup, + 1, 0.5f, + -1 + ); + + g_free(markup); + + people = json_object_get_array_member(section, "people"); + n_people = json_array_get_length(people); + + for(idx = 0; idx < n_people; idx++) { + GtkTreeIter person_iter; + + gtk_tree_store_append(store, &person_iter, §ion_iter); + gtk_tree_store_set( + store, + &person_iter, + 0, json_array_get_string_element(people, idx), + 1, 0.5f, + -1 + ); + } + } + + g_list_free(sections); + + /* clean up */ + g_object_unref(G_OBJECT(parser)); + + g_input_stream_close(istream, NULL, NULL); +} + +static void +_pidgin_about_dialog_load_developers(PidginAboutDialog *about) { + _pidgin_about_dialog_load_json(about->priv->developers_store, "developers"); +} + +static void +_pidgin_about_dialog_load_translators(PidginAboutDialog *about) { + _pidgin_about_dialog_load_json(about->priv->translators_store, "languages"); +} + +static void +_pidgin_about_dialog_add_build_args( + PidginAboutDialog *about, + const gchar *title, + const gchar *build_args +) { + GtkTreeIter section, value; + gchar **splits = NULL; + gchar *markup = NULL; + gint idx = 0; + + markup = g_strdup_printf("<span font-weight=\"bold\">%s</span>", title); + gtk_tree_store_append(about->priv->build_info_store, §ion, NULL); + gtk_tree_store_set( + about->priv->build_info_store, + §ion, + 0, markup, + -1 + ); + g_free(markup); + + /* now walk through the arguments and add them */ + splits = g_strsplit(build_args, " ", -1); + for(idx = 0; splits[idx]; idx++) { + gchar **value_split = g_strsplit(splits[idx], "=", 2); + + if(value_split[0] == NULL || value_split[0][0] == '\0') { + continue; + } + + gtk_tree_store_append(about->priv->build_info_store, &value, §ion); + gtk_tree_store_set( + about->priv->build_info_store, + &value, + 0, value_split[0] ? value_split[0] : "", + 1, value_split[1] ? value_split[1] : "", + -1 + ); + + g_strfreev(value_split); + } + + g_strfreev(splits); +} + +static void +_pidgin_about_dialog_build_info_add_version( + GtkTreeStore *store, + GtkTreeIter *section, + const gchar *title, + guint major, + guint minor, + guint micro +) { + GtkTreeIter item; + gchar *version = g_strdup_printf("%u.%u.%u", major, minor, micro); + + gtk_tree_store_append(store, &item, section); + gtk_tree_store_set( + store, &item, + 0, title, + 1, version, + -1 + ); + g_free(version); +} + +static void +_pidgin_about_dialog_load_build_info(PidginAboutDialog *about) { + GtkTreeIter section, item; + gchar *markup = NULL; + + /* create the section */ + markup = g_strdup_printf( + "<span font-weight=\"bold\">%s</span>", + _("Build Information") + ); + gtk_tree_store_append(about->priv->build_info_store, §ion, NULL); + gtk_tree_store_set( + about->priv->build_info_store, + §ion, + 0, markup, + -1 + ); + g_free(markup); + + /* add the commit hash */ + gtk_tree_store_append(about->priv->build_info_store, &item, §ion); + gtk_tree_store_set( + about->priv->build_info_store, + &item, + 0, "Commit Hash", + 1, REVISION, + -1 + ); + + /* add the purple version */ + _pidgin_about_dialog_build_info_add_version( + about->priv->build_info_store, + §ion, + _("Purple Version"), + PURPLE_MAJOR_VERSION, + PURPLE_MINOR_VERSION, + PURPLE_MICRO_VERSION + ); + + /* add the glib version */ + _pidgin_about_dialog_build_info_add_version( + about->priv->build_info_store, + §ion, + _("GLib Version"), + GLIB_MAJOR_VERSION, + GLIB_MINOR_VERSION, + GLIB_MICRO_VERSION + ); + + /* add the gtk version */ + _pidgin_about_dialog_build_info_add_version( + about->priv->build_info_store, + §ion, + _("GTK+ Version"), + GTK_MAJOR_VERSION, + GTK_MINOR_VERSION, + GTK_MICRO_VERSION + ); +} + +static void +_pidgin_about_dialog_load_runtime_info(PidginAboutDialog *about) { + GtkTreeIter section; + gchar *markup = NULL; + + /* create the section */ + markup = g_strdup_printf( + "<span font-weight=\"bold\">%s</span>", + _("Runtime Information") + ); + gtk_tree_store_append(about->priv->build_info_store, §ion, NULL); + gtk_tree_store_set( + about->priv->build_info_store, + §ion, + 0, markup, + -1 + ); + g_free(markup); + + /* add the purple version */ + _pidgin_about_dialog_build_info_add_version( + about->priv->build_info_store, + §ion, + _("Purple Version"), + purple_major_version, + purple_minor_version, + purple_micro_version + ); + + /* add the glib version */ + _pidgin_about_dialog_build_info_add_version( + about->priv->build_info_store, + §ion, + _("GLib Version"), + glib_major_version, + glib_minor_version, + glib_micro_version + ); + + /* add the gtk version */ + _pidgin_about_dialog_build_info_add_version( + about->priv->build_info_store, + §ion, + _("GTK+ Version"), + gtk_major_version, + gtk_minor_version, + gtk_micro_version + ); +} + +static void +_pidgin_about_dialog_load_build_configuration(PidginAboutDialog *about) { +#ifdef MESON_ARGS + _pidgin_about_dialog_add_build_args(about, "Meson Arguments", MESON_ARGS); +#endif /* MESON_ARGS */ +#ifdef CONFIG_ARGS + _pidgin_about_dialog_add_build_args(about, "Configure Arguments", CONFIG_ARGS); +#endif /* CONFIG_ARGS */ + + _pidgin_about_dialog_load_build_info(about); + _pidgin_about_dialog_load_runtime_info(about); +} + +/****************************************************************************** + * Callbacks + *****************************************************************************/ +static void +_pidgin_about_dialog_close(GtkWidget *b, gpointer data) { + gtk_widget_destroy(GTK_WIDGET(data)); +} + +/****************************************************************************** + * GObject Stuff + *****************************************************************************/ +G_DEFINE_TYPE_WITH_PRIVATE(PidginAboutDialog, pidgin_about_dialog, GTK_TYPE_DIALOG); + +static void +pidgin_about_dialog_class_init(PidginAboutDialogClass *klass) { + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); + + gtk_widget_class_set_template_from_resource( + widget_class, + "/im/pidgin/Pidgin/About/about.ui" + ); + + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, close_button); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, application_name); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, stack); + + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, main_scrolled_window); + + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_page); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_store); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, developers_treeview); + + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_page); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_store); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, translators_treeview); + + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_page); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_store); + gtk_widget_class_bind_template_child_private(widget_class, PidginAboutDialog, build_info_treeview); +} + +static void +pidgin_about_dialog_init(PidginAboutDialog *about) { + about->priv = pidgin_about_dialog_get_instance_private(about); + + gtk_widget_init_template(GTK_WIDGET(about)); + + /* wire up the close button */ + g_signal_connect( + about->priv->close_button, + "clicked", + G_CALLBACK(_pidgin_about_dialog_close), + about + ); + + /* setup the application name label */ + _pidgin_about_dialog_load_application_name(about); + + /* setup the main page */ + _pidgin_about_dialog_load_main_page(about); + + /* setup the developers stuff */ + _pidgin_about_dialog_load_developers(about); + gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->developers_treeview)); + + /* setup the translators stuff */ + _pidgin_about_dialog_load_translators(about); + gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->translators_treeview)); + + /* setup the build info page */ + _pidgin_about_dialog_load_build_configuration(about); + gtk_tree_view_expand_all(GTK_TREE_VIEW(about->priv->build_info_treeview)); +} + +GtkWidget * +pidgin_about_dialog_new(void) { + GtkWidget *about = NULL; + + about = g_object_new( + PIDGIN_TYPE_ABOUT_DIALOG, + "title", "About Pidgin", + NULL + ); + + return about; +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pidginabout.h Tue Sep 19 03:14:48 2017 +0000 @@ -0,0 +1,25 @@ +#ifndef PIDGIN_ABOUT_H +#define PIDGIN_ABOUT_H + +#include <gtk/gtk.h> + +#define PIDGIN_TYPE_ABOUT_DIALOG (pidgin_about_dialog_get_type()) +#define PIDGIN_ABOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_ABOUT_DIALOG, PidginAboutDialog)) +#define PIDGIN_ABOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_ABOUT_DIALOG, PidginAboutDialogClass)) +#define PIDGIN_IS_ABOUT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PIDGIN_TYPE_ABOUT_DIALOG)) +#define PIDGIN_IS_ABOUT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PIDGIN_TYPE_ABOUT_DIALOG)) +#define PIDGIN_ABOUT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PIDGIN_TYPE_ABOUT_DIALOG, PidginAboutDialogClass)) + +typedef struct _PidginAboutDialog PidginAboutDialog; +typedef struct _PidginAboutDialogClass PidginAboutDialogClass; +typedef struct _PidginAboutDialogPrivate PidginAboutDialogPrivate; + +G_BEGIN_DECLS + +GType pidgin_about_dialog_get_type(void); +GtkWidget *pidgin_about_dialog_new(void); + +G_END_DECLS + +#endif /* PIDGIN_ABOUT_H */ +
--- a/po/POTFILES.in Tue Sep 19 01:26:38 2017 +0000 +++ b/po/POTFILES.in Tue Sep 19 03:14:48 2017 +0000 @@ -168,6 +168,8 @@ libpurple/win32/libc_interface.c libpurple/xfer.c libpurple/xmlnode.c +[type: gettext/glade]pidgin/about.ui +pidgin/credits.json pidgin/data/im.pidgin.Pidgin.appdata.xml.in pidgin/data/im.pidgin.Pidgin.desktop.in.in pidgin/gtkaccount.c