Merge lp:~tintou/pantheon-photos/google-photos into lp:~pantheon-photos/pantheon-photos/trunk

Proposed by Corentin Noël
Status: Merged
Approved by: Cody Garver
Approved revision: 2979
Merged at revision: 2979
Proposed branch: lp:~tintou/pantheon-photos/google-photos
Merge into: lp:~pantheon-photos/pantheon-photos/trunk
Diff against target: 1089 lines (+239/-605)
5 files modified
plugins/pantheon-photos-publishing/PicasaPublishing.vala (+6/-387)
plugins/pantheon-photos-publishing/RESTSupport.vala (+1/-1)
plugins/pantheon-photos-publishing/google-photos.svg (+146/-0)
plugins/pantheon-photos-publishing/picasa_publishing_options_pane.ui (+86/-211)
schemas/org.pantheon.photos.gschema.xml (+0/-6)
To merge this branch: bzr merge lp:~tintou/pantheon-photos/google-photos
Reviewer Review Type Date Requested Status
Photos Devs Pending
Review via email: mp+301575@code.launchpad.net

Commit message

Use latest Google Photo API

Description of the change

Use latest Google Photo API (a.k.a remove functionalities)

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plugins/pantheon-photos-publishing/PicasaPublishing.vala'
2--- plugins/pantheon-photos-publishing/PicasaPublishing.vala 2016-02-19 19:55:55 +0000
3+++ plugins/pantheon-photos-publishing/PicasaPublishing.vala 2016-07-30 17:14:55 +0000
4@@ -5,7 +5,7 @@
5 */
6
7 public class PicasaService : Object, Spit.Pluggable, Spit.Publishing.Service {
8- private const string ICON_FILENAME = "picasa.png";
9+ private const string ICON_FILENAME = "google-photos.svg";
10 private GLib.Icon icon;
11
12 public PicasaService (GLib.File resource_directory) {
13@@ -22,7 +22,7 @@
14 }
15
16 public unowned string get_pluggable_name () {
17- return "Picasa Web Albums";
18+ return "Google Photos";
19 }
20
21 public void get_info (ref Spit.PluggableInfo info) {
22@@ -53,8 +53,7 @@
23 namespace Publishing.Picasa {
24
25 internal const string SERVICE_WELCOME_MESSAGE =
26- _ ("You are not currently logged into Picasa Web Albums.\n\nClick Login to log into Picasa Web Albums in your Web browser. You will have to authorize Shotwell Connect to link to your Picasa Web Albums account.");
27-internal const string DEFAULT_ALBUM_NAME = _ ("Shotwell Connect");
28+ _ ("You are not currently logged into Google Photos.\n\nClick Login to log into Google Photos in your Web browser. You will have to authorize elementary OS to link to your Google Photos account.");
29
30 public class PicasaPublisher : Publishing.RESTSupport.GooglePublisher {
31 private bool running;
32@@ -78,55 +77,14 @@
33 this.progress_reporter = null;
34 }
35
36- private Album[] extract_albums_helper (Xml.Node *document_root)
37- throws Spit.Publishing.PublishingError {
38- Album[] result = new Album[0];
39-
40- Xml.Node *doc_node_iter = null;
41- if (document_root->name == "feed")
42- doc_node_iter = document_root->children;
43- else if (document_root->name == "entry")
44- doc_node_iter = document_root;
45- else
46- throw new Spit.Publishing.PublishingError.MALFORMED_RESPONSE ("response root node " +
47- "isn't a <feed> or <entry>");
48-
49- for ( ; doc_node_iter != null; doc_node_iter = doc_node_iter->next) {
50- if (doc_node_iter->name != "entry")
51- continue;
52-
53- string name_val = null;
54- string url_val = null;
55- Xml.Node *album_node_iter = doc_node_iter->children;
56- for ( ; album_node_iter != null; album_node_iter = album_node_iter->next) {
57- if (album_node_iter->name == "title") {
58- name_val = album_node_iter->get_content ();
59- } else if (album_node_iter->name == "id") {
60- // we only want nodes in the default namespace -- the feed that we get back
61- // from Google also defines <entry> child nodes named <id> in the gphoto and
62- // media namespaces
63- if (album_node_iter->ns->prefix != null)
64- continue;
65- url_val = album_node_iter->get_content ();
66- }
67- }
68-
69- result += new Album (name_val, url_val);
70- }
71-
72- return result;
73- }
74-
75 private void load_parameters_from_configuration_system (PublishingParameters parameters) {
76 parameters.set_major_axis_size_selection_id (get_host ().get_config_int ("default-size", 0));
77 parameters.set_strip_metadata (get_host ().get_config_bool ("strip-metadata", false));
78- parameters.set_target_album_name (get_host ().get_config_string ("last-album", null));
79 }
80
81 private void save_parameters_to_configuration_system (PublishingParameters parameters) {
82 get_host ().set_config_int ("default-size", parameters.get_major_axis_size_selection_id ());
83 get_host ().set_config_bool ("strip_metadata", parameters.get_strip_metadata ());
84- get_host ().set_config_string ("last-album", parameters.get_target_album_name ());
85 }
86
87 private void on_service_welcome_login () {
88@@ -148,37 +106,6 @@
89 do_fetch_account_information ();
90 }
91
92- private void on_initial_album_fetch_complete (Publishing.RESTSupport.Transaction txn) {
93- txn.completed.disconnect (on_initial_album_fetch_complete);
94- txn.network_error.disconnect (on_initial_album_fetch_error);
95-
96- if (!is_running ())
97- return;
98-
99- debug ("EVENT: finished fetching account and album information.");
100-
101- do_parse_and_display_account_information ((AlbumDirectoryTransaction) txn);
102- }
103-
104- private void on_initial_album_fetch_error (Publishing.RESTSupport.Transaction bad_txn,
105- Spit.Publishing.PublishingError err) {
106- bad_txn.completed.disconnect (on_initial_album_fetch_complete);
107- bad_txn.network_error.disconnect (on_initial_album_fetch_error);
108-
109- if (!is_running ())
110- return;
111-
112- debug ("EVENT: fetching account and album information failed; response = '%s'.",
113- bad_txn.get_response ());
114-
115- if (bad_txn.get_status_code () == 403 || bad_txn.get_status_code () == 404) {
116- do_logout ();
117- } else {
118- // If we get any other kind of error, we can't recover, so just post it to the user
119- get_host ().post_error (err);
120- }
121- }
122-
123 private void on_publishing_options_logout () {
124 if (!is_running ())
125 return;
126@@ -195,67 +122,9 @@
127 debug ("EVENT: user clicked 'Publish' in the publishing options pane.");
128
129 save_parameters_to_configuration_system (publishing_parameters);
130-
131- if (publishing_parameters.is_to_new_album ()) {
132- do_create_album ();
133- } else {
134- do_upload ();
135- }
136- }
137-
138- private void on_album_creation_complete (Publishing.RESTSupport.Transaction txn) {
139- txn.completed.disconnect (on_album_creation_complete);
140- txn.network_error.disconnect (on_album_creation_error);
141-
142- if (!is_running ())
143- return;
144-
145- debug ("EVENT: finished creating album on remote server.");
146-
147- AlbumCreationTransaction downcast_txn = (AlbumCreationTransaction) txn;
148- Publishing.RESTSupport.XmlDocument response_doc;
149- try {
150- response_doc = Publishing.RESTSupport.XmlDocument.parse_string (
151- downcast_txn.get_response (), AlbumDirectoryTransaction.validate_xml);
152- } catch (Spit.Publishing.PublishingError err) {
153- get_host ().post_error (err);
154- return;
155- }
156-
157- Album[] response_albums;
158- try {
159- response_albums = extract_albums_helper (response_doc.get_root_node ());
160- } catch (Spit.Publishing.PublishingError err) {
161- get_host ().post_error (err);
162- return;
163- }
164-
165- if (response_albums.length != 1) {
166- get_host ().post_error (new Spit.Publishing.PublishingError.MALFORMED_RESPONSE ("album " +
167- "creation transaction responses must contain one and only one album directory " +
168- "entry"));
169- return;
170- }
171-
172- publishing_parameters.set_target_album_entry_url (response_albums[0].url);
173-
174 do_upload ();
175 }
176
177- private void on_album_creation_error (Publishing.RESTSupport.Transaction bad_txn,
178- Spit.Publishing.PublishingError err) {
179- bad_txn.completed.disconnect (on_album_creation_complete);
180- bad_txn.network_error.disconnect (on_album_creation_error);
181-
182- if (!is_running ())
183- return;
184-
185- debug ("EVENT: creating album on remote server failed; response = '%s'.",
186- bad_txn.get_response ());
187-
188- get_host ().post_error (err);
189- }
190-
191 private void on_upload_status_updated (int file_number, double completed_fraction) {
192 if (!is_running ())
193 return;
194@@ -305,40 +174,6 @@
195 get_host ().install_account_fetch_wait_pane ();
196 get_host ().set_service_locked (true);
197
198- AlbumDirectoryTransaction directory_trans =
199- new AlbumDirectoryTransaction (get_session ());
200- directory_trans.network_error.connect (on_initial_album_fetch_error);
201- directory_trans.completed.connect (on_initial_album_fetch_complete);
202-
203- try {
204- directory_trans.execute ();
205- } catch (Spit.Publishing.PublishingError err) {
206- // don't post the error here -- some errors are recoverable so let's let the error
207- // handler function sort out whether the error is recoverable or not. If the error
208- // isn't recoverable, the error handler will post the error to the host
209- on_initial_album_fetch_error (directory_trans, err);
210- }
211- }
212-
213- private void do_parse_and_display_account_information (AlbumDirectoryTransaction transaction) {
214- debug ("ACTION: parsing account and album information from server response XML");
215-
216- Publishing.RESTSupport.XmlDocument response_doc;
217- try {
218- response_doc = Publishing.RESTSupport.XmlDocument.parse_string (
219- transaction.get_response (), AlbumDirectoryTransaction.validate_xml);
220- } catch (Spit.Publishing.PublishingError err) {
221- get_host ().post_error (err);
222- return;
223- }
224-
225- try {
226- publishing_parameters.set_albums (extract_albums_helper (response_doc.get_root_node ()));
227- } catch (Spit.Publishing.PublishingError err) {
228- get_host ().post_error (err);
229- return;
230- }
231-
232 do_show_publishing_options_pane ();
233 }
234
235@@ -368,27 +203,6 @@
236 get_host ().set_service_locked (false);
237 }
238
239- private void do_create_album () {
240- assert (publishing_parameters.is_to_new_album ());
241-
242- debug ("ACTION: creating new album '%s' on remote server.",
243- publishing_parameters.get_target_album_name ());
244-
245- get_host ().install_static_message_pane (_ ("Creating album..."));
246-
247- get_host ().set_service_locked (true);
248-
249- AlbumCreationTransaction creation_trans = new AlbumCreationTransaction (get_session (),
250- publishing_parameters);
251- creation_trans.network_error.connect (on_album_creation_error);
252- creation_trans.completed.connect (on_album_creation_complete);
253- try {
254- creation_trans.execute ();
255- } catch (Spit.Publishing.PublishingError err) {
256- get_host ().post_error (err);
257- }
258- }
259-
260 private void do_upload () {
261 debug ("ACTION: uploading media items to remote server.");
262
263@@ -459,52 +273,6 @@
264 }
265 }
266
267-internal class Album {
268- public string name;
269- public string url;
270-
271- public Album (string name, string url) {
272- this.name = name;
273- this.url = url;
274- }
275-}
276-
277-internal class AlbumDirectoryTransaction :
278- Publishing.RESTSupport.GooglePublisher.AuthenticatedTransaction {
279- private const string ENDPOINT_URL = "http://picasaweb.google.com/data/feed/api/user/" +
280- "default";
281-
282- public AlbumDirectoryTransaction (Publishing.RESTSupport.GoogleSession session) {
283- base (session, ENDPOINT_URL, Publishing.RESTSupport.HttpMethod.GET);
284- }
285-
286- public static string? validate_xml (Publishing.RESTSupport.XmlDocument doc) {
287- Xml.Node *document_root = doc.get_root_node ();
288- if ((document_root->name == "feed") || (document_root->name == "entry"))
289- return null;
290- else
291- return "response root node isn't a <feed> or <entry>";
292- }
293-}
294-
295-private class AlbumCreationTransaction :
296- Publishing.RESTSupport.GooglePublisher.AuthenticatedTransaction {
297- private const string ENDPOINT_URL = "http://picasaweb.google.com/data/feed/api/user/" +
298- "default";
299- private const string ALBUM_ENTRY_TEMPLATE = "<?xml version='1.0' encoding='utf-8'?><entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'><title type='text'>%s</title><gphoto:access>%s</gphoto:access><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album'></category></entry>";
300-
301- public AlbumCreationTransaction (Publishing.RESTSupport.GoogleSession session,
302- PublishingParameters parameters) {
303- base (session, ENDPOINT_URL, Publishing.RESTSupport.HttpMethod.POST);
304-
305- string post_body = ALBUM_ENTRY_TEMPLATE.printf (Publishing.RESTSupport.decimal_entity_encode (
306- parameters.get_target_album_name ()), parameters.is_new_album_public () ?
307- "public" : "private");
308-
309- set_custom_payload (post_body, "application/atom+xml");
310- }
311-}
312-
313 internal class UploadTransaction :
314 Publishing.RESTSupport.GooglePublisher.AuthenticatedTransaction {
315 private PublishingParameters parameters;
316@@ -516,7 +284,7 @@
317
318 public UploadTransaction (Publishing.RESTSupport.GoogleSession session,
319 PublishingParameters parameters, Spit.Publishing.Publishable publishable) {
320- base (session, parameters.get_target_album_feed_url (),
321+ base (session, "https://picasaweb.google.com/data/feed/api/user/default/albumid/default",
322 Publishing.RESTSupport.HttpMethod.POST);
323 assert (session.is_authenticated ());
324 this.session = session;
325@@ -614,12 +382,6 @@
326 private Gtk.Builder builder = null;
327 private Gtk.Box pane_widget = null;
328 private Gtk.Label login_identity_label = null;
329- private Gtk.Label publish_to_label = null;
330- private Gtk.RadioButton use_existing_radio = null;
331- private Gtk.ComboBoxText existing_albums_combo = null;
332- private Gtk.RadioButton create_new_radio = null;
333- private Gtk.Entry new_album_entry = null;
334- private Gtk.CheckButton public_check = null;
335 private Gtk.ComboBoxText size_combo = null;
336 private Gtk.CheckButton strip_metadata_check = null;
337 private Gtk.Button publish_button = null;
338@@ -642,12 +404,6 @@
339 // pull in all widgets from builder.
340 pane_widget = (Gtk.Box) builder.get_object ("picasa_pane_widget");
341 login_identity_label = (Gtk.Label) builder.get_object ("login_identity_label");
342- publish_to_label = (Gtk.Label) builder.get_object ("publish_to_label");
343- use_existing_radio = (Gtk.RadioButton) builder.get_object ("use_existing_radio");
344- existing_albums_combo = (Gtk.ComboBoxText) builder.get_object ("existing_albums_combo");
345- create_new_radio = (Gtk.RadioButton) builder.get_object ("create_new_radio");
346- new_album_entry = (Gtk.Entry) builder.get_object ("new_album_entry");
347- public_check = (Gtk.CheckButton) builder.get_object ("public_check");
348 size_combo = (Gtk.ComboBoxText) builder.get_object ("size_combo");
349 strip_metadata_check = (Gtk.CheckButton) this.builder.get_object ("strip_metadata_check");
350 publish_button = (Gtk.Button) builder.get_object ("publish_button");
351@@ -660,11 +416,9 @@
352
353
354 if ((parameters.get_media_type () & Spit.Publishing.Publisher.MediaType.PHOTO) == 0) {
355- publish_to_label.set_label (_ ("Videos will appear in:"));
356 size_combo.set_visible (false);
357 size_combo.set_sensitive (false);
358 } else {
359- publish_to_label.set_label (_ ("Photos will appear in:"));
360 foreach (SizeDescription desc in size_descriptions) {
361 size_combo.append_text (desc.name);
362 }
363@@ -674,9 +428,6 @@
364 }
365
366 // connect all signals.
367- use_existing_radio.clicked.connect (on_use_existing_radio_clicked);
368- create_new_radio.clicked.connect (on_create_new_radio_clicked);
369- new_album_entry.changed.connect (on_new_album_entry_changed);
370 logout_button.clicked.connect (on_logout_clicked);
371 publish_button.clicked.connect (on_publish_clicked);
372 }
373@@ -691,52 +442,13 @@
374 parameters.set_major_axis_size_pixels (
375 size_descriptions[size_combo_last_active].major_axis_pixels);
376 parameters.set_strip_metadata (strip_metadata_check.get_active ());
377-
378- Album[] albums = parameters.get_albums ();
379-
380- if (create_new_radio.get_active ()) {
381- parameters.set_target_album_name (new_album_entry.get_text ());
382- parameters.set_is_to_new_album (true);
383- parameters.set_is_new_album_public (public_check.get_active ());
384- publish ();
385- } else {
386- parameters.set_target_album_name (albums[existing_albums_combo.get_active ()].name);
387- parameters.set_is_to_new_album (false);
388- parameters.set_target_album_entry_url (albums[existing_albums_combo.get_active ()].url);
389- publish ();
390- }
391- }
392-
393- private void on_use_existing_radio_clicked () {
394- existing_albums_combo.set_sensitive (true);
395- new_album_entry.set_sensitive (false);
396- existing_albums_combo.grab_focus ();
397- update_publish_button_sensitivity ();
398- public_check.set_sensitive (false);
399- }
400-
401- private void on_create_new_radio_clicked () {
402- new_album_entry.set_sensitive (true);
403- existing_albums_combo.set_sensitive (false);
404- new_album_entry.grab_focus ();
405- update_publish_button_sensitivity ();
406- public_check.set_sensitive (true);
407+ publish ();
408 }
409
410 private void on_logout_clicked () {
411 logout ();
412 }
413
414- private void update_publish_button_sensitivity () {
415- string album_name = new_album_entry.get_text ();
416- publish_button.set_sensitive (! (album_name.strip () == "" &&
417- create_new_radio.get_active ()));
418- }
419-
420- private void on_new_album_entry_changed () {
421- update_publish_button_sensitivity ();
422- }
423-
424 private SizeDescription[] create_size_descriptions () {
425 SizeDescription[] result = new SizeDescription[0];
426
427@@ -749,42 +461,6 @@
428 return result;
429 }
430
431- public void installed () {
432- int default_album_id = -1;
433- string last_album = parameters.get_target_album_name ();
434-
435- Album[] albums = parameters.get_albums ();
436-
437- for (int i = 0; i < albums.length; i++) {
438- existing_albums_combo.append_text (albums[i].name);
439- if (albums[i].name == last_album ||
440- (albums[i].name == DEFAULT_ALBUM_NAME && default_album_id == -1))
441- default_album_id = i;
442- }
443-
444- if (albums.length == 0) {
445- existing_albums_combo.set_sensitive (false);
446- use_existing_radio.set_sensitive (false);
447- create_new_radio.set_active (true);
448- new_album_entry.grab_focus ();
449- new_album_entry.set_text (DEFAULT_ALBUM_NAME);
450- } else {
451- if (default_album_id >= 0) {
452- use_existing_radio.set_active (true);
453- existing_albums_combo.set_active (default_album_id);
454- new_album_entry.set_sensitive (false);
455- public_check.set_sensitive (false);
456- } else {
457- create_new_radio.set_active (true);
458- existing_albums_combo.set_active (0);
459- new_album_entry.set_text (DEFAULT_ALBUM_NAME);
460- new_album_entry.grab_focus ();
461- public_check.set_sensitive (true);
462- }
463- }
464- update_publish_button_sensitivity ();
465- }
466-
467 public Gtk.Widget get_widget () {
468 return pane_widget;
469 }
470@@ -794,7 +470,7 @@
471 }
472
473 public void on_pane_installed () {
474- installed ();
475+
476 }
477
478 public void on_pane_uninstalled () {
479@@ -804,67 +480,18 @@
480 internal class PublishingParameters {
481 public const int ORIGINAL_SIZE = -1;
482
483- private string? target_album_name;
484- private string? target_album_url;
485- private bool album_public;
486 private bool strip_metadata;
487 private int major_axis_size_pixels;
488 private int major_axis_size_selection_id;
489 private string user_name;
490- private Album[] albums;
491 private Spit.Publishing.Publisher.MediaType media_type;
492- private bool to_new_album;
493
494 public PublishingParameters () {
495 this.user_name = "[unknown]";
496- this.target_album_name = null;
497 this.major_axis_size_selection_id = 0;
498 this.major_axis_size_pixels = ORIGINAL_SIZE;
499- this.target_album_url = null;
500- this.album_public = false;
501- this.albums = null;
502 this.strip_metadata = false;
503 this.media_type = Spit.Publishing.Publisher.MediaType.PHOTO;
504- this.to_new_album = true;
505- }
506-
507- public bool is_to_new_album () {
508- return to_new_album;
509- }
510-
511- public void set_is_to_new_album (bool to_new_album) {
512- this.to_new_album = to_new_album;
513- }
514-
515- public void set_is_new_album_public (bool album_public) {
516- this.album_public = album_public;
517- }
518-
519- public bool is_new_album_public () {
520- return album_public;
521- }
522-
523- public string get_target_album_name () {
524- return target_album_name;
525- }
526-
527- public void set_target_album_name (string target_album_name) {
528- this.target_album_name = target_album_name;
529- }
530-
531- public void set_target_album_entry_url (string target_album_url) {
532- this.target_album_url = target_album_url;
533- }
534-
535- public string get_target_album_entry_url () {
536- return target_album_url;
537- }
538-
539- public string get_target_album_feed_url () {
540- string entry_url = get_target_album_entry_url ();
541- string feed_url = entry_url.replace ("entry", "feed");
542-
543- return feed_url;
544 }
545
546 public string get_user_name () {
547@@ -875,14 +502,6 @@
548 this.user_name = user_name;
549 }
550
551- public Album[] get_albums () {
552- return albums;
553- }
554-
555- public void set_albums (Album[] albums) {
556- this.albums = albums;
557- }
558-
559 public void set_major_axis_size_pixels (int pixels) {
560 this.major_axis_size_pixels = pixels;
561 }
562
563=== modified file 'plugins/pantheon-photos-publishing/RESTSupport.vala'
564--- plugins/pantheon-photos-publishing/RESTSupport.vala 2016-01-14 12:35:35 +0000
565+++ plugins/pantheon-photos-publishing/RESTSupport.vala 2016-07-30 17:14:55 +0000
566@@ -1138,7 +1138,7 @@
567 do_exchange_refresh_token_for_access_token ();
568 } else {
569 if (WebAuthenticationPane.is_cache_dirty ()) {
570- host.install_static_message_pane (_ ("You have already logged in and out of a Google service during this Shotwell session.\n\nTo continue publishing to Google services, quit and restart Shotwell, then try publishing again."));
571+ host.install_static_message_pane (_ ("You have already logged in and out of a Google service during this session.\n\nTo continue publishing to Google services, quit and restart this software, then try publishing again."));
572 return;
573 }
574
575
576=== added file 'plugins/pantheon-photos-publishing/google-photos.svg'
577--- plugins/pantheon-photos-publishing/google-photos.svg 1970-01-01 00:00:00 +0000
578+++ plugins/pantheon-photos-publishing/google-photos.svg 2016-07-30 17:14:55 +0000
579@@ -0,0 +1,146 @@
580+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
581+<svg
582+ xmlns:dc="http://purl.org/dc/elements/1.1/"
583+ xmlns:cc="http://creativecommons.org/ns#"
584+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
585+ xmlns:svg="http://www.w3.org/2000/svg"
586+ xmlns="http://www.w3.org/2000/svg"
587+ xmlns:xlink="http://www.w3.org/1999/xlink"
588+ xml:space="preserve"
589+ height="96"
590+ width="96"
591+ version="1.1"
592+ y="0px"
593+ x="0px"
594+ viewBox="0 0 96 96"
595+ enable-background="new 0 0 96 96"
596+ id="svg2"><metadata
597+ id="metadata86"><rdf:RDF><cc:Work
598+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
599+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
600+ id="defs84" /><g
601+ id="g4"><defs
602+ id="defs6"><path
603+ d="M 95,48 73,48 73,23 49.71,0.3 C 49.53,0.11 49.28,0 49,0 48.45,0 48,0.45 48,1 L 48,23 23,23 0.3,46.29 C 0.11,46.47 0,46.72 0,47 c 0,0.55 0.45,1 1,1 l 22,0 0,25 23.29,22.7 c 0.18,0.19 0.43,0.3 0.71,0.3 0.55,0 1,-0.45 1,-1 L 48,73 73,73 95.7,49.71 C 95.89,49.53 96,49.28 96,49 96,48.45 95.55,48 95,48 Z"
604+ id="path8" /></defs><clipPath
605+ id="clipPath10"><use
606+ height="100%"
607+ width="100%"
608+ y="0"
609+ x="0"
610+ style="overflow:visible"
611+ overflow="visible"
612+ xlink:href="#SVGID_63_"
613+ id="use12" /></clipPath><radialGradient
614+ gradientUnits="userSpaceOnUse"
615+ cy="23"
616+ cx="22.860001"
617+ r="77.190002"
618+ id="radialGradient74"><stop
619+ stop-color="#fff"
620+ offset="0"
621+ id="stop76" /><stop
622+ stop-color="#fff"
623+ stop-opacity="0"
624+ offset="1"
625+ id="stop78" /></radialGradient><g
626+ transform="translate(-21.152542,61.830508)"
627+ id="g4284"><g
628+ id="g14"
629+ clip-path="url(#SVGID_2_)"
630+ transform="translate(21.152542,-61.830508)"><path
631+ style="fill:#4285f4"
632+ id="path16"
633+ d="M 95.7,49.71 C 95.89,49.53 96,49.28 96,49 96,48.45 95.55,48 95,48 l -47,0 0,25 25,0 22.7,-23.29 z" /><image
634+ style="overflow:visible;opacity:0.2"
635+ id="image18"
636+ overflow="visible"
637+ width="37"
638+ height="38"
639+ transform="translate(44,44)"
640+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAmCAYAAABDClKtAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABNJJREFUeNrMmEtv20YQx2dml6Qe kfyUk9RFoaY+RafCyD1A0I+gez+Kv0+O/QK+G4FPziGHIEDTtKlQ144smRK5M/2TUhw7duIngwqg uCT38duZ2dmZJfof/viK7+xbQvkLgJj6/U9gz3sA2vqmcO4s0BY/fUriX73ybe/d4njs1ps73Ov1 +M2bX1Fl+5uqrwTa3PzN/UkU1XDV09hRm+h4Og1LRFmapvne48eBnj/XqiX2UVKFhNzvgFkcuTpe N7Xm7mWZNRLz8Sj3EpoRLb929uzZz/by5cvK1ce0tcXNnR3HUZSEYPd8LEtB8yXH1jbhOrM5yYRC 44P+kef2y5MnlYKVUP1OR97A6OMsq0mgBWVdZXZrxrxipC1RiYgDmWO1cazvdFwpmHwsrAyHMmH2 KlRXkkUzui9mP7DKjzC4LjleZ3WdpsvbdEC1ncEg6vf78gUXcntJra2tyWjU8mTDOvlkiZQeQGXf MdNDfF4itkZR14yNKWgiHLJjCVVJrITqdrtydBSirG51y3SJme9j+BkU8yobNXGPizXHBBVSCFWC yRm3rcrOiUAfEbPWoEI4BVsFyTqAugD7CertQmLrwbLKVCnn9pNCR8QCoUR4rAGmjXIH5XV86IpS 5WBy4VuMiN9MYnMwjNUpJKZcPZh8zdufSIwBRlaosoPRKgeTr3+GxACGe6lKjFKqsmowuayCAQwG LihEVoJZ5WBypVpWeIKyLiTGlYPJNeoWHc9XZbVgck3JwsaqB5Mb2GHlYHLDVVspmNzCx1UGJrfc ESoBkzvYP+8c7C6grg0ml4D5r7pMKoK6YntGEGNlBmOXODKe9ckJCq1yn6KicdnatIhB8IxQTDma mA3Vdt++NeSZ+eksyZ+fcrkPo0IoYhgEdCiQBXwJ/OUM+vNseu79ERyiPTiKtgFvcy76CrizBOFa LkkrbL5+rS8+TdhO1OdcbCximISqFRCUodYUlJPyIkuBk+L9ZRfqol0BMQuDYvy3ALXCSg+LiBaz fYDAaNnySSs0x8k/rZbrn8rKz0jKTaeqvp4j2p0AaAyIIXo95FnAUOMylDG+2nZZVlT8ZYWUoDdf xvrMbYAtYtptZX8gGR81B4PJgCg/A9XpdGwyeasjruc+BZDKkTjdhw7/mtf7gM7juVr4qhtlYZMI LwoTyND+GM8jmERebPBYAB7a9CFGBNJY5OFwyPNmVkL1ej3b3T3S7MEww7uxMO9j/HfFVCHyQ2Nt QEqI2+1aq1Xn1g07xfw0A9Ax+jnEGAcIOsYFrJt69UeIimrpubME2dzcdGmaJtRo3JvksixssAFe hmxaJJIgqXBGiJDN+BqOwmaDQFjIcMnztAQz+qCO95GN/+t4ejCO49FGkmTb29thtmJP4PqysbHr aWUlSVQbE42azkLT1CXKuXeGVeCMb+bEYEU5Wy4wWUgnD5p6dqNMZVwL8ZhoMN3bg1ugLTsNRfNz KdnY3fVJ8n0kkkdj1sg79iHkyJtnKdiNvSvmJCnm5b1mSnluLmvrfhZCyD4/zeFztgkw+A05PFyT tHMgy6NRaUchLN86dXJu36IosvdxbLXBoi4s/K0vHj3SORBdBHX2NK84vevv8dPB4M7PCrax2k+d EJ7bKfia56F3/btw2/pPgAEAo6srCUabVPkAAAAASUVORK5CYII=" /><polygon
641+ style="fill:#3367d6"
642+ id="polygon20"
643+ points="48,73 73,73 48,48 " /><path
644+ style="fill:#263238;fill-opacity:0.2"
645+ id="path22"
646+ d="M 73,73 95.7,49.71 C 95.89,49.53 96,49.28 96,49 c 0,-0.09 -0.03,-0.17 -0.05,-0.25 -0.05,0.17 -0.12,0.34 -0.24,0.46 L 73,72.5 l -25,0 0,0.5 25,0 z" /><polygon
647+ style="fill:#263238;fill-opacity:0.1"
648+ id="polygon24"
649+ points="48,48 48,48.5 72.5,73 73,73 " /><path
650+ style="fill:#ffffff;fill-opacity:0.2"
651+ id="path26"
652+ d="M 95.95,49.25 C 95.97,49.17 96,49.09 96,49 96,48.45 95.55,48 95,48 l -47,0 0,0.5 47,0 c 0.46,0 0.84,0.32 0.95,0.75 z" /></g><g
653+ id="g28"
654+ clip-path="url(#SVGID_2_)"
655+ transform="translate(21.152542,-61.830508)"><path
656+ style="fill:#8bc34a"
657+ id="path32"
658+ d="m 46.29,95.7 c 0.18,0.19 0.43,0.3 0.71,0.3 0.55,0 1,-0.45 1,-1 l 0,-47 -25,0 0,25 23.29,22.7 z" /><image
659+ style="overflow:visible;opacity:0.2"
660+ id="image34"
661+ overflow="visible"
662+ width="37"
663+ height="38"
664+ transform="translate(17,42)"
665+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAmCAYAAABDClKtAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABRpJREFUeNrMmN1OG0cUx8+Zmd01 Bupg6jZNclOUqlIiVYpQ77nvNfe962vwFH2C3PES3FZRlSunqpQiUhqgMRjwxvZ+zMzpf9YOgQbC R9iqRoOXY++ZH+d7luniF1P9L7nqxjxZa0SrXV7p9W4dbqPTEVp/LNUeEzC5CGpyvbqqljc31fHx FyrrHKn2cKiC2Ln2J8Np3ZcoiuTvOJZG745vtd74X5eWPK2v+9OWOwsFoIfPn5skeRApZaMR+8ho Ns5ZRTO4w/sbg7FSojIl2hhferJWdPmZ75fOubL76JGbgp2BwjuAHj43tLiYJN43cx/NanGz4nXi 2Rot0KrlRlDMLGxZrPLeEJXW+cywHpZejRouHhH1im531cKdlSvfbaKWl5d1lmUJNZtzuVVtxbLI ntukaJ6USmAlLaSY5BpggJn8x17IsyfDBSRjrIHX3HdODjUXR6M4Hj5MknJjY8MFKBPuWVtbo6dP f1HF3TSKRm5OEX8OqAdO0z2oaov4JhNHkKnr5KQP3gi/WHlRvmQnY2x3LCQ9dorhCUA2Rq1BlKWN 1E49V0FRt9vlDoL6jefIkG9aUW1N/h6M/jW+dhdA81Afw7DqlHUvNxRBAwvMJCX+GuPOAcRvoKKE 7AjKIhcjXpv4avb+vgqqh7QfDueV0T0jZiZhcnOIujY+uot1H6sFkzeYSckV65dU9HA6Ygg3ZMFl YHRwadhToMh6MVYX7M3bI5kPZWIa6Oa0IhfHyhTWeNIJs2+KIJ6YW/ivFqAwAY4OzrgKEwfHBSCB DRjvTBZSBDXiKVhJ80CXdgT758NWxz6aQNEZKBfci5QXrZXyrCGKoDgWAQyFxQ0A6StUeqEpULWY C4hSCA+QNLu43kEC7cGpfWWSVA11vuhSt76xcQKlPtCI7EJgqyp1mBXSWVeLKqDLlppCv4MaYvVh oT0YeFs8vfLC28i8Pav9YU6jUZ7/VVYF9FRlNx/vfcJVDMm71nOyzrXQJI7gJpIct6S43ofrd0D6 Ch9sIo5eQdlOIebA2ySlO5QvLy3Zl6cK57mWumljDcnPlXUkA9AA1z3IXgNkC3b/Q3nagu1fa456 3pkBgLLvO51y/V9AtwV1LaDhJUC3AXXrQJ8KVQvQp0DVBnRTqFqBLisJH0v72oCuC1VV6mkdqg3o 6lChfHr8cKjUVWGsDehKMRXGDzjNV00V3b5uoCtYCm0Q4wfeq+YK7cNJ66gP6DKoah6qYKrxI3R7 6le9rEagi6Gwk1TzWWWhah4K40fo9qG51gl0LlQ4eYQY4om7AtAAEhvmIZhuu+r2NQJ9ABXOZq7A pMeqxMCasZIBAtsBcoiU2MOhZKsaP2oEOgOldSy6OMbYPGPFSo4YTyHexzaHsM4x9nuNoW87zEN1 Ap1AdTAfp+mmpCZ2UWELHFrewm4HAHChpSjhPiZ9jLK0pynarxPojKUO5ud9YzSyKI9j0v6IWGv4 cSDsS3HqkJzsi/H9YdlI6wQ6KZ7rjx/LbK/nLXNpceLQyhx68Xs4SWwrUn9iKN4hr/eRkIO6gc48 S1hZWdEv8zxqDWimNDRDsU6ccyrGwbFwOGrPuIwO2vmTJ3O2TiCankAqqK2tH+mbL3+jnnGilHPJ WBVmlsaZL8YLGkCjUfH7d/fdi5qBTkOFR1m0u/uTLH+761O4Mv+qbUtjyuZgUC4sLNhnz35w9OJn qRvovCd5PH1O9V4+eeImH3scWDfURbL/BOZ//fpHgAEAH/AR7cEXvmwAAAAASUVORK5CYII=" /><polygon
666+ style="fill:#0f9d58"
667+ id="polygon36"
668+ points="23,73 48,48 23,48 " /><path
669+ style="fill:#3e2723;fill-opacity:0.1"
670+ id="path38"
671+ d="m 47,95.5 c -0.28,0 -0.53,-0.11 -0.71,-0.3 L 23.25,72.75 23,73 46.29,95.7 c 0.18,0.19 0.43,0.3 0.71,0.3 0.55,0 1,-0.45 1,-1 l 0,-0.5 c 0,0.55 -0.45,1 -1,1 z" /><polygon
672+ style="fill:#3e2723;fill-opacity:0.05"
673+ id="polygon40"
674+ points="48,48.5 47.5,48.5 23,73 23,73.5 " /></g><g
675+ id="g42"
676+ clip-path="url(#SVGID_2_)"
677+ transform="translate(21.152542,-61.830508)"><path
678+ style="fill:#ffbc00"
679+ id="path46"
680+ d="M 0.3,46.29 C 0.11,46.47 0,46.72 0,47 c 0,0.55 0.45,1 1,1 L 48,48 48,23 23,23 0.3,46.29 Z" /><image
681+ style="overflow:visible;opacity:0.2"
682+ id="image48"
683+ overflow="visible"
684+ width="34"
685+ height="35"
686+ transform="translate(19.5,18.5)"
687+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAkCAYAAAAD3IPhAAAACXBIWXMAAAsSAAALEgHS3X78AAAA GXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA9ZJREFUeNrMmFtvEzsQgGfGzm4u mwKBJgKKEEKnErz2D/Sn88YTT7xxXhBNqXqhSZvmsvHac8ZZbxoQaUOypMeSY8e3+Ty+zSzCzwEP 5Wf/AOCo/Q+Oxy+h7FCrHcOrs3/5yyeAD3kRz4UXGYHAwYsXFBFR0iBK4xqCIawwY1kgBpGh4jhO x3x1Y93QGFc9O3OfAhAWILu7u9RrNitjokgjxlIs3ZgIGYlgYyCHwM75wdARsLHMU2YzrZ4PTK/X sx5Ie6B0bw+v4lhbtHUBeSSYjwA5AYJY8mQxh2FYT0vSPZ85ggMPATyUSfadoivYbQ6blQqDaMjD wDSKaIJYAUWJKKHNzHsiti2Sm1IdMYMKw+KaKuI8spV0JJlzmVfX68iiMqpVzw7fv89hVJoiNWIl LUUT/Fim8lKEvpGqtsRE8hVJaXGP/SmMdJQ5sZEhruX/N08nizZgxGuq1SZv9/chh5FNUVHEsqi+ g2/my5MA80xiA26BYA0oGVeWCHAq+V4Y4Fx+voGcEbQWj46OZkIh3tlxSqkM07Go0PWl6CJ06vBs qaG2IZCfocBAGrruSFFdRohQDgkbI9fIeKYZHlSrvqGByWQoDT2xCGcfq7L5/MlajOsAFTA+RGEM JaXkV9CFgzHbmCcnJ5gpxTWt5Xj5bQWZiLFBngoDFCA69Cv2UJHeFyEAjYPmu4x8TIwXiGrESZLp grzb7cLTTidrNhoj1jMS9CvEtxqY5TFP/ZJJq7mG7j/dywHnQS+q8snpqXve6Zj+s8ZoJMTW/nxf Y8iHtMG3QKXc0osw/q3gQwF6BR0DHkhtF0j/WvCQQPp3hQ8FpJdVPASQvqty20D6vgbbBNKrNNoW kF614YZA5cKUAMSlwqwLtCCHS4VZB0hCvXiU7wLS615Qfwj0lHObyOEdQHqT63tVoPDUPwny3DIN bQSzKhDw3LhKZkZcACq8hiKoMp7+rxJbwyF0KGLbqDiLaMTo9UKzINifJu3dHlGSt4MvheRYYlcq LhDU2BtXpcCsCORtaQya6UvuRNJjcnihSI1cktjSYO4C4hzAzo1yhJ6UeZjvhHSpongctVrlwiwD coBG9scUc+9gJOklzmD4FIj7Kqqlr9+9Kx/md0ApUyZbOJV18sb4tYD98F6IuAU/MusGKZC5mkzc X4H5FWgQxeKmOaM8DJJ4keB9s75yOIgcTIY3N/bj58/812AWgdJ63UWtqSXUBpy49c6N2OEoZp48 HgyyTK6GrwDlfXu5z1U5OADxEdsE1zE1nAMbxxxNpy7udvnD4veZLQZc4m3+/8J/AgwA3MF+EysI U+8AAAAASUVORK5CYII=" /><polygon
688+ style="fill:#ff9800"
689+ id="polygon50"
690+ points="48,23 23,23 48,48 " /><path
691+ style="fill:#ffffff;fill-opacity:0.2"
692+ id="path52"
693+ d="M 23,23 0.3,46.29 C 0.11,46.47 0,46.72 0,47 0,47.09 0.03,47.17 0.05,47.25 0.1,47.08 0.17,46.91 0.29,46.79 L 23,23.5 l 25,0 0,-0.5 -25,0 z" /><path
694+ style="fill:#3e2723;fill-opacity:0.05"
695+ id="path54"
696+ d="M 0.05,47.25 C 0.03,47.33 0,47.41 0,47.5 c 0,0.55 0.45,1 1,1 l 47,0 L 48,48 1,48 C 0.54,48 0.16,47.68 0.05,47.25 Z" /><polygon
697+ style="fill:#3e2723;fill-opacity:0.1"
698+ id="polygon56"
699+ points="48,48 48,47.5 23.5,23 23,23 " /></g><g
700+ id="g58"
701+ clip-path="url(#SVGID_2_)"
702+ transform="translate(21.152542,-61.830508)"><path
703+ style="fill:#db4437"
704+ id="path60"
705+ d="M 49.71,0.3 C 49.53,0.11 49.28,0 49,0 48.45,0 48,0.45 48,1 L 48,48 73,48 73,23 49.71,0.3 Z" /><path
706+ style="fill:#ffffff;fill-opacity:0.2"
707+ id="path62"
708+ d="M 49.71,0.3 C 49.53,0.11 49.28,0 49,0 48.45,0 48,0.45 48,1 l 0,0.5 c 0,-0.55 0.45,-1 1,-1 0.28,0 0.53,0.11 0.71,0.3 L 72.49,23.01 73,23 49.71,0.3 Z" /><polygon
709+ style="fill:#ad1457"
710+ id="polygon64"
711+ points="73,23 48,48 73,48 " /><g
712+ style="opacity:0.2"
713+ id="g66"><polygon
714+ style="fill:#ffffff"
715+ id="polygon68"
716+ points="48,47.5 48.5,47.5 73,23 72.49,23.01 " /></g><rect
717+ style="fill:#3e2723;fill-opacity:0.1"
718+ id="rect70"
719+ x="48"
720+ y="47.5"
721+ width="25"
722+ height="0.5" /><polygon
723+ style="fill:#f1f1f1"
724+ id="polygon72"
725+ points="45,45 48,38 51,45 58,48 51,51 48,58 45,51 38,48 " /></g></g></g></svg>
726\ No newline at end of file
727
728=== modified file 'plugins/pantheon-photos-publishing/picasa_publishing_options_pane.ui'
729--- plugins/pantheon-photos-publishing/picasa_publishing_options_pane.ui 2016-01-29 03:10:35 +0000
730+++ plugins/pantheon-photos-publishing/picasa_publishing_options_pane.ui 2016-07-30 17:14:55 +0000
731@@ -1,235 +1,103 @@
732 <?xml version="1.0" encoding="UTF-8"?>
733+<!-- Generated with glade 3.18.3 -->
734 <interface>
735- <!-- interface-requires gtk+ 3.0 -->
736+ <requires lib="gtk+" version="3.0"/>
737 <object class="GtkBox" id="picasa_pane_widget">
738 <property name="visible">True</property>
739 <property name="can_focus">False</property>
740+ <property name="halign">center</property>
741+ <property name="margin_left">12</property>
742+ <property name="margin_right">12</property>
743+ <property name="margin_top">12</property>
744+ <property name="margin_bottom">12</property>
745+ <property name="vexpand">True</property>
746 <property name="orientation">vertical</property>
747- <property name="spacing">1</property>
748- <child>
749- <placeholder/>
750- </child>
751+ <property name="spacing">12</property>
752 <child>
753 <object class="GtkLabel" id="login_identity_label">
754 <property name="visible">True</property>
755 <property name="can_focus">False</property>
756- <property name="margin_top">12</property>
757- <property name="margin_bottom">32</property>
758 <property name="label" translatable="yes">'you are logged in as $name'
759 (populated in the application code)</property>
760- </object>
761- <packing>
762- <property name="expand">False</property>
763- <property name="fill">True</property>
764- <property name="padding">4</property>
765+ <style>
766+ <class name="h3"/>
767+ </style>
768+ </object>
769+ <packing>
770+ <property name="expand">False</property>
771+ <property name="fill">True</property>
772+ <property name="position">0</property>
773+ </packing>
774+ </child>
775+ <child>
776+ <object class="GtkGrid" id="album_choice_area_grid">
777+ <property name="visible">True</property>
778+ <property name="can_focus">False</property>
779+ <property name="row_spacing">6</property>
780+ <property name="column_spacing">12</property>
781+ <property name="column_homogeneous">True</property>
782+ <child>
783+ <object class="GtkCheckButton" id="strip_metadata_check">
784+ <property name="label" translatable="yes">_Remove location, camera, and other identifying information before uploading</property>
785+ <property name="visible">True</property>
786+ <property name="can_focus">True</property>
787+ <property name="receives_default">False</property>
788+ <property name="halign">center</property>
789+ <property name="hexpand">True</property>
790+ <property name="use_underline">True</property>
791+ <property name="xalign">0.20000000298023224</property>
792+ <property name="draw_indicator">True</property>
793+ </object>
794+ <packing>
795+ <property name="left_attach">0</property>
796+ <property name="top_attach">1</property>
797+ <property name="width">2</property>
798+ </packing>
799+ </child>
800+ <child>
801+ <object class="GtkComboBoxText" id="size_combo">
802+ <property name="visible">True</property>
803+ <property name="can_focus">False</property>
804+ </object>
805+ <packing>
806+ <property name="left_attach">1</property>
807+ <property name="top_attach">0</property>
808+ </packing>
809+ </child>
810+ <child>
811+ <object class="GtkLabel" id="label1">
812+ <property name="visible">True</property>
813+ <property name="can_focus">False</property>
814+ <property name="label" translatable="yes">Photo _size preset:</property>
815+ <property name="use_underline">True</property>
816+ <property name="mnemonic_widget">size_combo</property>
817+ <property name="xalign">1</property>
818+ </object>
819+ <packing>
820+ <property name="left_attach">0</property>
821+ <property name="top_attach">0</property>
822+ </packing>
823+ </child>
824+ </object>
825+ <packing>
826+ <property name="expand">False</property>
827+ <property name="fill">True</property>
828+ <property name="padding">3</property>
829 <property name="position">1</property>
830 </packing>
831 </child>
832 <child>
833- <object class="GtkBox" id="album_gallery_layout_box">
834- <property name="visible">True</property>
835- <property name="can_focus">False</property>
836- <property name="margin_left">32</property>
837- <property name="margin_right">32</property>
838- <property name="orientation">vertical</property>
839- <child>
840- <placeholder/>
841- </child>
842- <child>
843- <object class="GtkGrid" id="album_choice_area_grid">
844- <property name="visible">True</property>
845- <property name="can_focus">False</property>
846- <property name="margin_left">24</property>
847- <property name="margin_right">24</property>
848- <property name="row_spacing">8</property>
849- <property name="column_homogeneous">True</property>
850- <child>
851- <object class="GtkComboBoxText" id="existing_albums_combo">
852- <property name="visible">True</property>
853- <property name="can_focus">False</property>
854- <property name="entry_text_column">0</property>
855- <property name="id_column">1</property>
856- </object>
857- <packing>
858- <property name="left_attach">1</property>
859- <property name="top_attach">1</property>
860- <property name="width">1</property>
861- <property name="height">1</property>
862- </packing>
863- </child>
864- <child>
865- <object class="GtkEntry" id="new_album_entry">
866- <property name="visible">True</property>
867- <property name="can_focus">True</property>
868- <property name="invisible_char">•</property>
869- </object>
870- <packing>
871- <property name="left_attach">1</property>
872- <property name="top_attach">2</property>
873- <property name="width">1</property>
874- <property name="height">1</property>
875- </packing>
876- </child>
877- <child>
878- <object class="GtkRadioButton" id="use_existing_radio">
879- <property name="label" translatable="yes">An _existing album:</property>
880- <property name="visible">True</property>
881- <property name="can_focus">True</property>
882- <property name="receives_default">False</property>
883- <property name="use_underline">True</property>
884- <property name="xalign">0</property>
885- <property name="active">True</property>
886- <property name="draw_indicator">True</property>
887- <property name="group">create_new_radio</property>
888- </object>
889- <packing>
890- <property name="left_attach">0</property>
891- <property name="top_attach">1</property>
892- <property name="width">1</property>
893- <property name="height">1</property>
894- </packing>
895- </child>
896- <child>
897- <object class="GtkRadioButton" id="create_new_radio">
898- <property name="label" translatable="yes">A _new album named:</property>
899- <property name="visible">True</property>
900- <property name="can_focus">True</property>
901- <property name="receives_default">False</property>
902- <property name="use_underline">True</property>
903- <property name="xalign">0</property>
904- <property name="yalign">0.47999998927116394</property>
905- <property name="active">True</property>
906- <property name="draw_indicator">True</property>
907- </object>
908- <packing>
909- <property name="left_attach">0</property>
910- <property name="top_attach">2</property>
911- <property name="width">1</property>
912- <property name="height">1</property>
913- </packing>
914- </child>
915- <child>
916- <object class="GtkCheckButton" id="public_check">
917- <property name="label" translatable="yes">L_ist album in public gallery</property>
918- <property name="visible">True</property>
919- <property name="can_focus">True</property>
920- <property name="receives_default">False</property>
921- <property name="use_underline">True</property>
922- <property name="xalign">0</property>
923- <property name="draw_indicator">True</property>
924- </object>
925- <packing>
926- <property name="left_attach">1</property>
927- <property name="top_attach">3</property>
928- <property name="width">1</property>
929- <property name="height">1</property>
930- </packing>
931- </child>
932- <child>
933- <object class="GtkLabel" id="publish_to_label">
934- <property name="visible">True</property>
935- <property name="can_focus">False</property>
936- <property name="margin_top">32</property>
937- <property name="xalign">0</property>
938- <property name="label" translatable="yes">$mediatype will appear in
939-(populated in code)</property>
940- </object>
941- <packing>
942- <property name="left_attach">0</property>
943- <property name="top_attach">0</property>
944- <property name="width">2</property>
945- <property name="height">1</property>
946- </packing>
947- </child>
948- <child>
949- <object class="GtkLabel" id="label1">
950- <property name="visible">True</property>
951- <property name="can_focus">False</property>
952- <property name="margin_top">32</property>
953- <property name="xalign">0</property>
954- <property name="label" translatable="yes">Photo _size preset:</property>
955- <property name="use_underline">True</property>
956- <property name="mnemonic_widget">size_combo</property>
957- </object>
958- <packing>
959- <property name="left_attach">0</property>
960- <property name="top_attach">4</property>
961- <property name="width">1</property>
962- <property name="height">1</property>
963- </packing>
964- </child>
965- <child>
966- <object class="GtkComboBoxText" id="size_combo">
967- <property name="visible">True</property>
968- <property name="can_focus">False</property>
969- <property name="margin_top">32</property>
970- <property name="entry_text_column">0</property>
971- <property name="id_column">1</property>
972- </object>
973- <packing>
974- <property name="left_attach">1</property>
975- <property name="top_attach">4</property>
976- <property name="width">1</property>
977- <property name="height">1</property>
978- </packing>
979- </child>
980- <child>
981- <object class="GtkCheckButton" id="strip_metadata_check">
982- <property name="label" translatable="yes">_Remove location, camera, and other identifying information before uploading</property>
983- <property name="visible">True</property>
984- <property name="can_focus">True</property>
985- <property name="receives_default">False</property>
986- <property name="halign">center</property>
987- <property name="margin_top">16</property>
988- <property name="hexpand">True</property>
989- <property name="use_underline">True</property>
990- <property name="xalign">0.20000000298023224</property>
991- <property name="draw_indicator">True</property>
992- </object>
993- <packing>
994- <property name="left_attach">0</property>
995- <property name="top_attach">5</property>
996- <property name="width">2</property>
997- <property name="height">1</property>
998- </packing>
999- </child>
1000- <child>
1001- <placeholder/>
1002- </child>
1003- </object>
1004- <packing>
1005- <property name="expand">False</property>
1006- <property name="fill">True</property>
1007- <property name="padding">4</property>
1008- <property name="position">1</property>
1009- </packing>
1010- </child>
1011- </object>
1012- <packing>
1013- <property name="expand">False</property>
1014- <property name="fill">True</property>
1015- <property name="position">2</property>
1016- </packing>
1017- </child>
1018- <child>
1019- <placeholder/>
1020- </child>
1021- <child>
1022- <object class="GtkBox" id="button_area_box">
1023- <property name="visible">True</property>
1024- <property name="can_focus">False</property>
1025- <property name="margin_left">112</property>
1026- <property name="margin_right">112</property>
1027- <property name="margin_top">48</property>
1028- <property name="margin_bottom">24</property>
1029- <property name="spacing">128</property>
1030- <property name="homogeneous">True</property>
1031+ <object class="GtkButtonBox" id="button_area_box">
1032+ <property name="visible">True</property>
1033+ <property name="can_focus">False</property>
1034+ <property name="layout_style">start</property>
1035 <child>
1036 <object class="GtkButton" id="logout_button">
1037 <property name="label" translatable="yes">_Logout</property>
1038 <property name="visible">True</property>
1039 <property name="can_focus">True</property>
1040 <property name="receives_default">True</property>
1041+ <property name="halign">start</property>
1042 <property name="use_underline">True</property>
1043 </object>
1044 <packing>
1045@@ -244,19 +112,26 @@
1046 <property name="visible">True</property>
1047 <property name="can_focus">True</property>
1048 <property name="receives_default">True</property>
1049+ <property name="halign">end</property>
1050 <property name="use_underline">True</property>
1051+ <style>
1052+ <class name="suggested-action"/>
1053+ </style>
1054 </object>
1055 <packing>
1056 <property name="expand">False</property>
1057 <property name="fill">True</property>
1058+ <property name="pack_type">end</property>
1059 <property name="position">1</property>
1060+ <property name="secondary">True</property>
1061 </packing>
1062 </child>
1063 </object>
1064 <packing>
1065 <property name="expand">False</property>
1066 <property name="fill">True</property>
1067- <property name="position">4</property>
1068+ <property name="pack_type">end</property>
1069+ <property name="position">2</property>
1070 </packing>
1071 </child>
1072 </object>
1073
1074=== modified file 'schemas/org.pantheon.photos.gschema.xml'
1075--- schemas/org.pantheon.photos.gschema.xml 2016-01-14 12:35:35 +0000
1076+++ schemas/org.pantheon.photos.gschema.xml 2016-07-30 17:14:55 +0000
1077@@ -403,12 +403,6 @@
1078 <summary>default size</summary>
1079 <description>A numeric code representing the default size for photos uploaded to Picasa Web Albums</description>
1080 </key>
1081-
1082- <key name="last-album" type="s">
1083- <default>""</default>
1084- <summary>last album</summary>
1085- <description>The name of the last album the user published photos to, if any</description>
1086- </key>
1087
1088 <key name="strip-metadata" type="b">
1089 <default>false</default>

Subscribers

People subscribed via source and target branches

to all changes: