[shotwell/wip/gtk4: 145/154] wip: Publishing




commit 76e231794727c41b7fb4401df35be689793fdefc
Author: Jens Georg <mail jensge org>
Date:   Sat May 7 07:46:29 2022 +0200

    wip: Publishing

 data/ui/static_message_pane_widget.ui              |  14 +-
 flatpak/org.gnome.Shotwell.json                    |  28 ++-
 meson.build                                        |   4 +-
 .../shotwell/ShotwellAuthenticatorFactory.vala     |   9 +-
 .../shotwell/TumblrAuthenticator.vala              |   9 +-
 plugins/authenticator/shotwell/meson.build         |   8 +-
 .../shotwell/tumblr_authentication_pane.ui         | 110 +++------
 plugins/meson.build                                |   4 +-
 .../shotwell-publishing/PhotosPublishingPane.vala  |   6 +-
 plugins/shotwell-publishing/PhotosService.vala     |  10 +-
 plugins/shotwell-publishing/PiwigoPublishing.vala  |  40 ++--
 plugins/shotwell-publishing/TumblrPublishing.vala  |  20 +-
 .../google_photos_publishing_options_pane.ui       | 183 ++++++---------
 plugins/shotwell-publishing/meson.build            |   4 +-
 .../piwigo_authentication_pane.ui                  | 173 ++++++--------
 .../piwigo_publishing_options_pane.ui              | 252 +++++++--------------
 .../shotwell-publishing/shotwell-publishing.vala   |   8 +-
 17 files changed, 326 insertions(+), 556 deletions(-)
---
diff --git a/data/ui/static_message_pane_widget.ui b/data/ui/static_message_pane_widget.ui
index 7a5441af..312c3cdc 100644
--- a/data/ui/static_message_pane_widget.ui
+++ b/data/ui/static_message_pane_widget.ui
@@ -1,29 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.0 -->
 <interface>
-  <requires lib="gtk+" version="3.22"/>
+  <requires lib="gtk" version="4.0"/>
   <template class="PublishingUIStaticMessagePane" parent="GtkBox">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
     <property name="orientation">vertical</property>
     <child>
       <object class="GtkLabel" id="static_msg_label">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
         <property name="margin_start">16</property>
         <property name="margin_end">16</property>
         <property name="margin_top">97</property>
         <property name="margin_bottom">24</property>
         <property name="label" comments="This is a placeholder string and may be ignored.">This is populated 
from within the code;
 changes made here will not display.</property>
-        <property name="wrap">True</property>
+        <property name="wrap">1</property>
         <property name="max_width_chars">70</property>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
-      </packing>
     </child>
   </template>
 </interface>
diff --git a/flatpak/org.gnome.Shotwell.json b/flatpak/org.gnome.Shotwell.json
index 63d36b7f..bb0c55c7 100644
--- a/flatpak/org.gnome.Shotwell.json
+++ b/flatpak/org.gnome.Shotwell.json
@@ -69,8 +69,8 @@
             "sources" : [
                 {
                     "type" : "git",
-                    "tag" : "4.5.2",
-                    "commit" : "69357b1e88680658a07cffde7678a4d697469f03",
+                    "tag" : "4.5.5",
+                    "commit" : "dad26339a975b49cfb6c7dbe4bd5276c9dcb36e2",
                     "url" : "https://github.com/opencv/opencv";
                 }
             ]
@@ -213,6 +213,30 @@
                 }
             ]
         },
+        {
+            "name" : "gcr4",
+            "buildsystem" : "meson",
+            "config-opts" : [
+                "-Dgtk4=true",
+                "-Dgtk3=false",
+                "-Dgtk_doc=false",
+                "-Dssh_agent=false",
+                "-Dsystemd=disabled"
+            ],
+            "build-options" : {
+                "env" : {
+                    "PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_GIRDIR" : "/app/share/gir-1.0",
+                    "PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_TYPELIBDIR" : "/app/lib/girepository-1.0"
+                }
+            },
+            "sources" : [
+                {
+                    "type" : "git",
+                    "url": "file:///home/jens/Source/gcr",
+                    "branch" : "phako/install-gcr-gtk4.h"
+                }
+            ]
+        },
         {
             "name" : "shotwell",
             "buildsystem" : "meson",
diff --git a/meson.build b/meson.build
index 05e3a72a..9bc1b90f 100644
--- a/meson.build
+++ b/meson.build
@@ -107,8 +107,8 @@ endif
 
 json_glib = dependency('json-glib-1.0')
 # gdata = dependency('libgdata')
-gcr = dependency('gcr-3')
-gcr_ui = dependency('gcr-ui-3')
+gcr = dependency('gcr-4')
+gcr_ui = dependency('gcr-4-gtk4')
 cairo = dependency('cairo')
 
 valac = meson.get_compiler('vala')
diff --git a/plugins/authenticator/shotwell/ShotwellAuthenticatorFactory.vala 
b/plugins/authenticator/shotwell/ShotwellAuthenticatorFactory.vala
index 01fa3c39..95bca55d 100644
--- a/plugins/authenticator/shotwell/ShotwellAuthenticatorFactory.vala
+++ b/plugins/authenticator/shotwell/ShotwellAuthenticatorFactory.vala
@@ -25,13 +25,16 @@ namespace Publishing.Authenticator {
                                                      Spit.Publishing.PluginHost host) {
             switch (provider) {
                 case "flickr":
-                    return new Shotwell.Flickr.Flickr(host);
+                    //return new Shotwell.Flickr.Flickr(host);
+                    return null;
                 case "youtube":
-                    return new Shotwell.Google.Google("https://www.googleapis.com/auth/youtube";, _("You are 
not currently logged into YouTube.\n\nYou must have already signed up for a Google account and set it up for 
use with YouTube to continue. You can set up most accounts by using your browser to log into the YouTube site 
at least once.\n\nShotwell uses the YouTube API services <a 
href=\"https://developers.google.com/youtube\";>https://developers.google.com/youtube</a> for accessing your 
YouTube channel and upload the videos. By using Shotwell to access YouTube, you agree to be bound to the 
YouTube Terms of Service as available at <a 
href=\"https://www.youtube.com/t/terms\";>https://www.youtube.com/t/terms</a>\n\nShotwell's privacy policy 
regarding the use of data related to your Google account in general and YouTube in particular can be found in 
our <a href=\"help:shotwell/privacy-policy\">online services privacy policy</a>\n\nFor Google's own privacy 
policy, please refer to <a hr
 ef=\"https://policies.google.com/privacy\";>https://policies.google.com/privacy</a>"), host);
+                    //return new Shotwell.Google.Google("https://www.googleapis.com/auth/youtube";, _("You 
are not currently logged into YouTube.\n\nYou must have already signed up for a Google account and set it up 
for use with YouTube to continue. You can set up most accounts by using your browser to log into the YouTube 
site at least once.\n\nShotwell uses the YouTube API services <a 
href=\"https://developers.google.com/youtube\";>https://developers.google.com/youtube</a> for accessing your 
YouTube channel and upload the videos. By using Shotwell to access YouTube, you agree to be bound to the 
YouTube Terms of Service as available at <a 
href=\"https://www.youtube.com/t/terms\";>https://www.youtube.com/t/terms</a>\n\nShotwell's privacy policy 
regarding the use of data related to your Google account in general and YouTube in particular can be found in 
our <a href=\"help:shotwell/privacy-policy\">online services privacy policy</a>\n\nFor Google's own privacy 
policy, please refer to <a 
 href=\"https://policies.google.com/privacy\";>https://policies.google.com/privacy</a>"), host);
+                    return null;
                 case "tumblr":
                     return new Shotwell.Tumblr.Tumblr(host);
                 case "google-photos":
-                    return new Shotwell.Google.Google("https://www.googleapis.com/auth/photoslibrary";, 
_("You are not currently logged into Google Photos.\n\nYou must have already signed up for a Google account 
and set it up for use with Google Photos. Shotwell uses the Google Photos API services <a 
href=\"https://developers.google.com/photos/\";>https://developers.google.com/photos/</a> for all interaction 
with your Google Photos data. You will have to grant access Shotwell to your Google Photos 
library.\n\nShotwell's privacy policy regarding the use of data related to your Google account in general and 
Google Photos in particular can be found in our <a href=\"help:shotwell/privacy-policy\">online services 
privacy policy</a>. For Google's own privacy policy, please refer to <a 
href=\"https://policies.google.com/privacy\";>https://policies.google.com/privacy</a>"), host);
+                    //return new Shotwell.Google.Google("https://www.googleapis.com/auth/photoslibrary";, 
_("You are not currently logged into Google Photos.\n\nYou must have already signed up for a Google account 
and set it up for use with Google Photos. Shotwell uses the Google Photos API services <a 
href=\"https://developers.google.com/photos/\";>https://developers.google.com/photos/</a> for all interaction 
with your Google Photos data. You will have to grant access Shotwell to your Google Photos 
library.\n\nShotwell's privacy policy regarding the use of data related to your Google account in general and 
Google Photos in particular can be found in our <a href=\"help:shotwell/privacy-policy\">online services 
privacy policy</a>. For Google's own privacy policy, please refer to <a 
href=\"https://policies.google.com/privacy\";>https://policies.google.com/privacy</a>"), host);
+                    return null;
                default:
                     return null;
             }
diff --git a/plugins/authenticator/shotwell/TumblrAuthenticator.vala 
b/plugins/authenticator/shotwell/TumblrAuthenticator.vala
index 385572cf..59a79db8 100644
--- a/plugins/authenticator/shotwell/TumblrAuthenticator.vala
+++ b/plugins/authenticator/shotwell/TumblrAuthenticator.vala
@@ -39,7 +39,6 @@ namespace Publishing.Authenticator.Shotwell.Tumblr {
             try {
                 builder = new Gtk.Builder();
                 builder.add_from_resource (Resources.RESOURCE_PATH + "/tumblr_authentication_pane.ui");
-                builder.connect_signals(null);
                 var content = builder.get_object ("content") as Gtk.Widget;
 
                 Gtk.Label message_label = builder.get_object("message_label") as Gtk.Label;
@@ -55,19 +54,16 @@ namespace Publishing.Authenticator.Shotwell.Tumblr {
                 }
 
                 username_entry = builder.get_object ("username_entry") as Gtk.Entry;
-
                 password_entry = builder.get_object ("password_entry") as Gtk.Entry;
 
-
-
                 login_button = builder.get_object("login_button") as Gtk.Button;
 
                 username_entry.changed.connect(on_user_changed);
                 password_entry.changed.connect(on_password_changed);
                 login_button.clicked.connect(on_login_button_clicked);
 
-                content.parent.remove (content);
-                pane_widget.add (content);
+                content.unparent();
+                pane_widget.append (content);
             } catch (Error e) {
                 warning(_("Could not load UI: %s"), e.message);
             }
@@ -107,7 +103,6 @@ namespace Publishing.Authenticator.Shotwell.Tumblr {
         public void on_pane_installed() {
             username_entry.grab_focus();
             password_entry.set_activates_default(true);
-            login_button.can_default = true;
             update_login_button_sensitivity();
         }
 
diff --git a/plugins/authenticator/shotwell/meson.build b/plugins/authenticator/shotwell/meson.build
index b43b889e..a359fcd3 100644
--- a/plugins/authenticator/shotwell/meson.build
+++ b/plugins/authenticator/shotwell/meson.build
@@ -1,7 +1,7 @@
 authenticator_shotwell_sources = [
         'ShotwellAuthenticatorFactory.vala',
-        'FlickrPublishingAuthenticator.vala',
-        'GoogleAuthenticator.vala',
+#        'FlickrPublishingAuthenticator.vala',
+#        'GoogleAuthenticator.vala',
         'OAuth1Authenticator.vala',
         'TumblrAuthenticator.vala'
         ]
@@ -11,13 +11,13 @@ authenticator_shotwell_resources = gnome.compile_resources('authenticator-resour
         source_dir : meson.source_root())
 
 authenticator_shotwell_deps = [gee, gtk, gio, soup, json_glib, sw_plugin,
-                               sw_plugin_common_dep, json_glib, xml, webkit, secret]
+                               sw_plugin_common_dep, json_glib, xml, secret]
 
 authenticator = library('shotwell-authenticator',
                         authenticator_shotwell_sources + authenticator_shotwell_resources,
                         dependencies : authenticator_shotwell_deps,
                         include_directories : config_incdir,
-                        version: meson.project_version(),
+                        version: so_version,
                         vala_args : ['--gresources',
                         'org.gnome.Shotwell.Authenticator.gresource.xml'],
                         c_args :
diff --git a/plugins/authenticator/shotwell/tumblr_authentication_pane.ui 
b/plugins/authenticator/shotwell/tumblr_authentication_pane.ui
index 24a647fb..0ac73351 100644
--- a/plugins/authenticator/shotwell/tumblr_authentication_pane.ui
+++ b/plugins/authenticator/shotwell/tumblr_authentication_pane.ui
@@ -1,126 +1,90 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
 <interface domain="shotwell">
-  <requires lib="gtk+" version="3.14"/>
+  <requires lib="gtk" version="4.0"/>
   <object class="GtkWindow" id="authentication_pane">
-    <property name="can_focus">False</property>
-    <child>
+    <property name="child">
       <object class="GtkBox" id="content">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="margin_left">30</property>
-        <property name="margin_right">30</property>
+        <property name="margin-start">30</property>
+        <property name="margin-end">30</property>
         <property name="orientation">vertical</property>
         <property name="spacing">8</property>
         <child>
           <object class="GtkLabel" id="message_label">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
             <property name="halign">start</property>
-            <property name="hexpand">True</property>
-            <property name="vexpand">True</property>
+            <property name="hexpand">1</property>
+            <property name="vexpand">1</property>
             <property name="label">label</property>
-            <property name="wrap">True</property>
+            <property name="wrap">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
         </child>
         <child>
           <object class="GtkGrid" id="field_table">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="vexpand">1</property>
             <property name="row_spacing">2</property>
             <property name="column_spacing">8</property>
             <child>
               <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
                 <property name="halign">start</property>
                 <property name="label" translatable="yes">_Email address</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
                 <property name="mnemonic_widget">username_entry</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="username_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hexpand">True</property>
+                <property name="focusable">1</property>
+                <property name="hexpand">1</property>
                 <property name="invisible_char">●</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="password_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hexpand">True</property>
-                <property name="vexpand">False</property>
-                <property name="visibility">False</property>
+                <property name="focusable">1</property>
+                <property name="hexpand">1</property>
+                <property name="vexpand">0</property>
+                <property name="visibility">0</property>
                 <property name="invisible_char">●</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
                 <property name="halign">start</property>
                 <property name="label" translatable="yes">_Password</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
                 <property name="mnemonic_widget">password_entry</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
         </child>
         <child>
-          <object class="GtkButtonBox" id="hbuttonbox1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+          <object class="GtkBox" id="hbuttonbox1">
+            <property name="vexpand">1</property>
             <child>
               <object class="GtkButton" id="login_button">
                 <property name="label" translatable="yes">Log in</property>
-                <property name="use_action_appearance">False</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="focusable">1</property>
+                <property name="receives_default">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">3</property>
-          </packing>
         </child>
       </object>
-    </child>
+    </property>
   </object>
 </interface>
diff --git a/plugins/meson.build b/plugins/meson.build
index 5ec3cd3e..17a294ce 100644
--- a/plugins/meson.build
+++ b/plugins/meson.build
@@ -16,8 +16,8 @@ sw_plugin_common = library('shotwell-plugin-common',
 sw_plugin_common_dep = declare_dependency(include_directories : include_directories('.'),
                                           link_with : sw_plugin_common)
 
-#subdir('authenticator')
-#subdir('shotwell-publishing')
+subdir('authenticator')
+subdir('shotwell-publishing')
 #if get_option('extra_plugins')
 #  subdir('shotwell-publishing-extras')
 #endif
diff --git a/plugins/shotwell-publishing/PhotosPublishingPane.vala 
b/plugins/shotwell-publishing/PhotosPublishingPane.vala
index fe2dfbdd..deff0045 100644
--- a/plugins/shotwell-publishing/PhotosPublishingPane.vala
+++ b/plugins/shotwell-publishing/PhotosPublishingPane.vala
@@ -26,7 +26,7 @@ internal class PublishingOptionsPane : Gtk.Box, Spit.Publishing.DialogPane {
     [GtkChild]
     private unowned Gtk.Button publish_button;
     [GtkChild]
-    private unowned Gtk.RadioButton existing_album_radio;
+    private unowned Gtk.CheckButton existing_album_radio;
     [GtkChild]
     private unowned Gtk.ComboBoxText existing_albums_combo;
     [GtkChild]
@@ -38,7 +38,7 @@ internal class PublishingOptionsPane : Gtk.Box, Spit.Publishing.DialogPane {
     [GtkChild]
     private unowned Gtk.CheckButton strip_metadata_check;
     [GtkChild]
-    private unowned Gtk.RadioButton new_album_radio;
+    private unowned Gtk.CheckButton new_album_radio;
     [GtkChild]
     private unowned Gtk.Entry new_album_entry;
 
@@ -52,7 +52,7 @@ internal class PublishingOptionsPane : Gtk.Box, Spit.Publishing.DialogPane {
         this.parameters = parameters;
 
         if (!can_logout) {
-            logout_button.parent.remove(logout_button);
+            logout_button.unparent();
         }
 
         // populate any widgets whose contents are programmatically-generated.
diff --git a/plugins/shotwell-publishing/PhotosService.vala b/plugins/shotwell-publishing/PhotosService.vala
index 8e328f41..05430139 100644
--- a/plugins/shotwell-publishing/PhotosService.vala
+++ b/plugins/shotwell-publishing/PhotosService.vala
@@ -8,14 +8,6 @@
 namespace Publishing.GooglePhotos {
 
 public class Service : Object, Spit.Pluggable, Spit.Publishing.Service {
-    private const string ICON_FILENAME = "google-photos.svg";
-
-    private static Gdk.Pixbuf[] icon_pixbuf_set = null;
-
-    static construct {
-        icon_pixbuf_set = Resources.load_from_resource(Resources.RESOURCE_PATH + "/" + ICON_FILENAME);
-    }
-
     public Service(GLib.File resource_directory) {}
 
     public int get_pluggable_interface(int min_host_interface, int max_host_interface) {
@@ -40,7 +32,7 @@ public class Service : Object, Spit.Pluggable, Spit.Publishing.Service {
         info.website_url = Resources.WEBSITE_URL;
         info.is_license_wordwrapped = false;
         info.license = Resources.LICENSE;
-        info.icons = icon_pixbuf_set;
+        info.icon = "google-photos";
     }
 
     public Spit.Publishing.Publisher create_publisher(Spit.Publishing.PluginHost host) {
diff --git a/plugins/shotwell-publishing/PiwigoPublishing.vala 
b/plugins/shotwell-publishing/PiwigoPublishing.vala
index acfb3f3f..b47cb8af 100644
--- a/plugins/shotwell-publishing/PiwigoPublishing.vala
+++ b/plugins/shotwell-publishing/PiwigoPublishing.vala
@@ -5,14 +5,8 @@
  */
 
 public class PiwigoService : Object, Spit.Pluggable, Spit.Publishing.Service {
-    private const string ICON_FILENAME = "piwigo.svg";
-
-    private static Gdk.Pixbuf[] icon_pixbuf_set = null;
-    
-    public PiwigoService(GLib.File resource_directory) {
-        if (icon_pixbuf_set == null)
-            icon_pixbuf_set = Resources.load_from_resource
-                (Resources.RESOURCE_PATH + "/" + ICON_FILENAME);
+    public PiwigoService() {
+        Object();
     }
     
     public int get_pluggable_interface(int min_host_interface, int max_host_interface) {
@@ -37,7 +31,7 @@ public class PiwigoService : Object, Spit.Pluggable, Spit.Publishing.Service {
         info.website_url = Resources.WEBSITE_URL;
         info.is_license_wordwrapped = false;
         info.license = Resources.LICENSE;
-        info.icons = icon_pixbuf_set;
+        info.icon = "piwigo";
     }
 
     public void activation(bool enabled) {
@@ -1110,15 +1104,17 @@ internal class SSLErrorPane : Shotwell.Plugins.Common.BuilderPane {
                                 null,
                                 flags,
                                 _("_OK"), Gtk.ResponseType.OK);
-                dialog.get_content_area ().add (widget);
+                dialog.get_content_area ().append (widget);
                 dialog.set_default_response (Gtk.ResponseType.OK);
                 dialog.set_default_size (640, -1);
-                dialog.show_all ();
-                dialog.run ();
-                dialog.destroy ();
+                dialog.show ();
+                dialog.set_modal(true);
+                dialog.response.connect(() => {
+                    dialog.destroy();
+                });
             });
         } else {
-            info.get_parent().remove(info);
+            info.unparent();
         }
 
         var proceed = this.get_builder ().get_object ("proceed_button") as Gtk.Button;
@@ -1155,7 +1151,6 @@ internal class AuthenticationPane : Shotwell.Plugins.Common.BuilderPane {
     public AuthenticationPane (PiwigoPublisher publisher, Mode mode = Mode.INTRO) {
         Object (resource_path : Resources.RESOURCE_PATH +
                                 "/piwigo_authentication_pane.ui",
-                connect_signals : true,
                 default_id : "login_button",
                 mode : mode,
                 publisher : publisher);
@@ -1239,7 +1234,6 @@ internal class AuthenticationPane : Shotwell.Plugins.Common.BuilderPane {
 
         url_entry.grab_focus();
         password_entry.set_activates_default(true);
-        login_button.can_default = true;
         update_login_button_sensitivity();
     }
 }
@@ -1251,8 +1245,8 @@ internal class PublishingOptionsPane : Shotwell.Plugins.Common.BuilderPane {
 
     private static string DEFAULT_CATEGORY_NAME = _("Shotwell Connect");
 
-    private Gtk.RadioButton use_existing_radio;
-    private Gtk.RadioButton create_new_radio;
+    private Gtk.CheckButton use_existing_radio;
+    private Gtk.CheckButton create_new_radio;
     private Gtk.ComboBoxText existing_categories_combo;
     private Gtk.Entry new_category_entry;
     private Gtk.Label within_existing_label;
@@ -1295,7 +1289,6 @@ internal class PublishingOptionsPane : Shotwell.Plugins.Common.BuilderPane {
                                  bool strip_metadata_enabled) {
         Object (resource_path : Resources.RESOURCE_PATH +
                                 "/piwigo_publishing_options_pane.ui",
-                connect_signals : true,
                 default_id : "publish_button",
                 last_category : last_category,
                 last_permission_level : last_permission_level,
@@ -1313,8 +1306,8 @@ internal class PublishingOptionsPane : Shotwell.Plugins.Common.BuilderPane {
         base.constructed ();
         var builder = this.get_builder ();
 
-        use_existing_radio = builder.get_object("use_existing_radio") as Gtk.RadioButton;
-        create_new_radio = builder.get_object("create_new_radio") as Gtk.RadioButton;
+        use_existing_radio = builder.get_object("use_existing_radio") as Gtk.CheckButton;
+        create_new_radio = builder.get_object("create_new_radio") as Gtk.CheckButton;
         existing_categories_combo = builder.get_object("existing_categories_combo") as Gtk.ComboBoxText;
         new_category_entry = builder.get_object ("new_category_entry") as Gtk.Entry;
         within_existing_label = builder.get_object ("within_existing_label") as Gtk.Label;
@@ -1345,8 +1338,8 @@ internal class PublishingOptionsPane : Shotwell.Plugins.Common.BuilderPane {
         publish_button = builder.get_object("publish_button") as Gtk.Button;
         publish_button.clicked.connect(on_publish_button_clicked);
 
-        use_existing_radio.clicked.connect(on_use_existing_radio_clicked);
-        create_new_radio.clicked.connect(on_create_new_radio_clicked);
+        use_existing_radio.toggled.connect(on_use_existing_radio_clicked);
+        create_new_radio.toggled.connect(on_create_new_radio_clicked);
         new_category_entry.changed.connect(on_new_category_entry_changed);
         within_existing_combo.changed.connect(on_existing_combo_changed);
 
@@ -1468,7 +1461,6 @@ internal class PublishingOptionsPane : Shotwell.Plugins.Common.BuilderPane {
         create_permissions_combo();
         create_size_combo();
 
-        publish_button.can_default = true;
         update_publish_button_sensitivity();
     }
 
diff --git a/plugins/shotwell-publishing/TumblrPublishing.vala 
b/plugins/shotwell-publishing/TumblrPublishing.vala
index 3525d227..3b933949 100644
--- a/plugins/shotwell-publishing/TumblrPublishing.vala
+++ b/plugins/shotwell-publishing/TumblrPublishing.vala
@@ -6,15 +6,8 @@
  */
 
 public class TumblrService : Object, Spit.Pluggable, Spit.Publishing.Service {
-    private const string ICON_FILENAME = "tumblr.png";
-
-    private static Gdk.Pixbuf[] icon_pixbuf_set = null;
-
-    public TumblrService(GLib.File resource_directory) {
-        if (icon_pixbuf_set == null)
-            icon_pixbuf_set =
-                Resources.load_from_resource(Resources.RESOURCE_PATH + "/" +
-                        ICON_FILENAME);
+    public TumblrService() {
+        Object();
     }
 
     public int get_pluggable_interface(int min_host_interface, int max_host_interface) {
@@ -39,7 +32,7 @@ public class TumblrService : Object, Spit.Pluggable, Spit.Publishing.Service {
         info.website_url = Resources.WEBSITE_URL;
         info.is_license_wordwrapped = false;
         info.license = Resources.LICENSE;
-        info.icons = icon_pixbuf_set;
+        info.icon = "tumblr";
     }
 
     public void activation(bool enabled) {
@@ -464,7 +457,6 @@ namespace Publishing.Tumblr {
                     builder = new Gtk.Builder();
                     builder.add_from_resource (Resources.RESOURCE_PATH +
                             "/tumblr_publishing_options_pane.ui");
-                    builder.connect_signals(null);
 
                     // pull in the necessary widgets from the glade file
                     pane_widget = (Gtk.Box) this.builder.get_object("tumblr_pane");
@@ -499,17 +491,11 @@ namespace Publishing.Tumblr {
                 }
             }
 
-
-
-
-
             private void on_logout_clicked() {
                 logout();
             }
 
             private void on_publish_clicked() {
-
-
                 publish();
             }
 
diff --git a/plugins/shotwell-publishing/google_photos_publishing_options_pane.ui 
b/plugins/shotwell-publishing/google_photos_publishing_options_pane.ui
index 8685b965..8526ed30 100644
--- a/plugins/shotwell-publishing/google_photos_publishing_options_pane.ui
+++ b/plugins/shotwell-publishing/google_photos_publishing_options_pane.ui
@@ -1,10 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.0 -->
 <interface domain="shotwell">
-  <requires lib="gtk+" version="3.14"/>
+  <requires lib="gtk" version="4.0"/>
+  <requires lib="gtk" version="4.0"/>
   <template class="PublishingGooglePhotosPublishingOptionsPane" parent="GtkBox">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
     <property name="margin_start">18</property>
     <property name="margin_end">18</property>
     <property name="margin_top">18</property>
@@ -16,200 +14,147 @@
     </child>
     <child>
       <object class="GtkLabel" id="login_identity_label">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="visible">0</property>
         <property name="halign">start</property>
         <property name="margin_top">12</property>
         <property name="margin_bottom">32</property>
-        <property name="label">'you are logged in as $name' (populated in the application code)</property>
+        <property name="label">&apos;you are logged in as $name&apos; (populated in the application 
code)</property>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="padding">4</property>
-        <property name="position">1</property>
-      </packing>
     </child>
     <child>
       <object class="GtkBox" id="album_gallery_layout_box">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="visible">0</property>
         <property name="margin_start">32</property>
         <property name="margin_end">32</property>
         <property name="orientation">vertical</property>
         <child>
           <object class="GtkLabel" id="publish_to_label">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="visible">0</property>
+            <property name="vexpand">1</property>
             <property name="halign">start</property>
             <property name="label">$mediatype will appear in (populated in code)</property>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
         </child>
         <child>
           <object class="GtkGrid" id="album_choice_area_grid">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="visible">0</property>
             <property name="margin_start">24</property>
             <property name="margin_end">24</property>
             <property name="row_spacing">6</property>
             <property name="column_spacing">12</property>
-            <property name="column_homogeneous">True</property>
+            <property name="column_homogeneous">1</property>
             <child>
               <object class="GtkComboBoxText" id="existing_albums_combo">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
                 <property name="tooltip_text" translatable="yes">Shotwell can only publish into albums that 
it created by itself, so this list might be empty despite the fact that you already have albums in your 
Google Photos account</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkCheckButton" id="strip_metadata_check">
+                <property name="visible">0</property>
                 <property name="label" translatable="yes">_Remove location, camera, and other identifying 
information before uploading</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
+                <property name="focusable">1</property>
                 <property name="halign">start</property>
                 <property name="margin_top">16</property>
-                <property name="hexpand">True</property>
-                <property name="use_underline">True</property>
-                <property name="draw_indicator">True</property>
+                <property name="hexpand">1</property>
+                <property name="use_underline">1</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">3</property>
+                  <property name="column-span">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-                <property name="width">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label1">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">Photo _size preset</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
                 <property name="mnemonic_widget">size_combo</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkComboBoxText" id="size_combo">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">2</property>
-              </packing>
             </child>
             <child>
-              <object class="GtkRadioButton" id="existing_album_radio">
+              <object class="GtkCheckButton" id="existing_album_radio">
+                <property name="visible">0</property>
                 <property name="label" translatable="yes">An existing album</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
                 <property name="halign">end</property>
-                <property name="active">True</property>
-                <property name="draw_indicator">True</property>
+                <property name="active">1</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
-              <object class="GtkRadioButton" id="new_album_radio">
+              <object class="GtkCheckButton" id="new_album_radio">
+                <property name="visible">0</property>
                 <property name="label" translatable="yes">A new album named</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
                 <property name="halign">end</property>
-                <property name="active">True</property>
-                <property name="draw_indicator">True</property>
+                <property name="active">1</property>
                 <property name="group">existing_album_radio</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="new_album_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="visible">0</property>
+                <property name="focusable">1</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="padding">4</property>
-            <property name="position">1</property>
-          </packing>
         </child>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">2</property>
-      </packing>
     </child>
     <child>
       <placeholder/>
     </child>
     <child>
-      <object class="GtkButtonBox">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="layout_style">spread</property>
+      <object class="GtkBox">
+        <property name="visible">0</property>
         <child>
           <object class="GtkButton" id="logout_button">
+            <property name="visible">0</property>
             <property name="label" translatable="yes">_Logout</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
+            <property name="focusable">1</property>
+            <property name="receives_default">1</property>
+            <property name="use_underline">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
         </child>
         <child>
           <object class="GtkButton" id="publish_button">
+            <property name="visible">0</property>
             <property name="label" translatable="yes">_Publish</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_underline">True</property>
+            <property name="focusable">1</property>
+            <property name="receives_default">1</property>
+            <property name="use_underline">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
         </child>
       </object>
-      <packing>
-        <property name="expand">False</property>
-        <property name="fill">True</property>
-        <property name="position">4</property>
-      </packing>
     </child>
   </template>
   <object class="GtkSizeGroup">
diff --git a/plugins/shotwell-publishing/meson.build b/plugins/shotwell-publishing/meson.build
index 3096ee56..dc32a799 100644
--- a/plugins/shotwell-publishing/meson.build
+++ b/plugins/shotwell-publishing/meson.build
@@ -1,8 +1,8 @@
 shotwell_publishing_sources = [
     'shotwell-publishing.vala',
-    'FlickrPublishing.vala',
+#    'FlickrPublishing.vala',
     'TumblrPublishing.vala',
-    'YouTubePublishing.vala',
+#    'YouTubePublishing.vala',
     'YoutubeUploader.vala',
     'PiwigoPublishing.vala',
     'PhotosPublisher.vala',
diff --git a/plugins/shotwell-publishing/piwigo_authentication_pane.ui 
b/plugins/shotwell-publishing/piwigo_authentication_pane.ui
index 82c90185..70dc23c3 100644
--- a/plugins/shotwell-publishing/piwigo_authentication_pane.ui
+++ b/plugins/shotwell-publishing/piwigo_authentication_pane.ui
@@ -1,176 +1,147 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
 <interface domain="shotwell">
-  <requires lib="gtk+" version="3.14"/>
+  <requires lib="gtk" version="4.0"/>
+  <requires lib="gtk" version="4.0"/>
   <object class="GtkWindow" id="authentication_pane">
-    <property name="can_focus">False</property>
-    <child>
+    <property name="child">
       <object class="GtkBox" id="content">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="margin_left">30</property>
-        <property name="margin_right">30</property>
-        <property name="hexpand">True</property>
+        <property name="visible">0</property>
+        <property name="margin-start">30</property>
+        <property name="margin-end">30</property>
+        <property name="hexpand">1</property>
         <property name="orientation">vertical</property>
         <property name="spacing">12</property>
         <child>
           <object class="GtkLabel" id="message_label">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="visible">0</property>
             <property name="halign">start</property>
-            <property name="hexpand">True</property>
-            <property name="vexpand">True</property>
+            <property name="hexpand">1</property>
+            <property name="vexpand">1</property>
             <property name="label">label</property>
-            <property name="wrap">True</property>
+            <property name="wrap">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
         </child>
         <child>
           <object class="GtkGrid" id="field_table">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="hexpand">True</property>
+            <property name="visible">0</property>
+            <property name="vexpand">1</property>
+            <property name="hexpand">1</property>
             <property name="row_spacing">6</property>
             <property name="column_spacing">12</property>
             <child>
               <object class="GtkLabel" id="label1">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">_URL of your Piwigo photo library</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
                 <property name="mnemonic_widget">url_entry</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="url_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hexpand">True</property>
+                <property name="visible">0</property>
+                <property name="focusable">1</property>
+                <property name="hexpand">1</property>
                 <property name="invisible_char">●</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="password_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hexpand">True</property>
-                <property name="visibility">False</property>
+                <property name="visible">0</property>
+                <property name="focusable">1</property>
+                <property name="hexpand">1</property>
+                <property name="visibility">0</property>
                 <property name="invisible_char">●</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkSwitch" id="remember_password_checkbutton">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="visible">0</property>
+                <property name="focusable">1</property>
                 <property name="halign">start</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">3</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">3</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">User _name</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="username_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hexpand">True</property>
+                <property name="visible">0</property>
+                <property name="focusable">1</property>
+                <property name="hexpand">1</property>
                 <property name="invisible_char">●</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">_Password</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
                 <property name="mnemonic_widget">password_entry</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="visible">0</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">Remember Password</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">3</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
         </child>
         <child>
-          <object class="GtkButtonBox" id="hbuttonbox1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="layout_style">center</property>
+          <object class="GtkBox" id="hbuttonbox1">
+            <property name="visible">0</property>
+            <property name="vexpand">1</property>
             <child>
               <object class="GtkButton" id="login_button">
+                <property name="visible">0</property>
                 <property name="label" translatable="yes">Log in</property>
-                <property name="use_action_appearance">False</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="focusable">1</property>
+                <property name="receives_default">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
         </child>
       </object>
-    </child>
+    </property>
   </object>
 </interface>
diff --git a/plugins/shotwell-publishing/piwigo_publishing_options_pane.ui 
b/plugins/shotwell-publishing/piwigo_publishing_options_pane.ui
index c17d6164..94fd7c29 100644
--- a/plugins/shotwell-publishing/piwigo_publishing_options_pane.ui
+++ b/plugins/shotwell-publishing/piwigo_publishing_options_pane.ui
@@ -1,189 +1,150 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.0 -->
 <interface domain="shotwell">
-  <requires lib="gtk+" version="3.14"/>
+  <requires lib="gtk" version="4.0"/>
   <object class="GtkWindow" id="publishing_options_pane">
-    <property name="can_focus">False</property>
-    <child>
+    <property name="child">
       <object class="GtkBox" id="content">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
         <property name="margin_start">10</property>
         <property name="margin_end">10</property>
         <property name="orientation">vertical</property>
         <property name="spacing">12</property>
         <child>
           <object class="GtkLabel" id="label1">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="vexpand">1</property>
             <property name="halign">start</property>
             <property name="label" translatable="yes">Photos will appear in:</property>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
         </child>
         <child>
           <object class="GtkGrid" id="field_table">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="vexpand">1</property>
             <property name="row_spacing">6</property>
             <property name="column_spacing">12</property>
             <child>
-              <object class="GtkRadioButton" id="use_existing_radio">
+              <object class="GtkCheckButton" id="use_existing_radio">
                 <property name="label" translatable="yes">An _existing category</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
                 <property name="halign">end</property>
-                <property name="use_underline">True</property>
-                <property name="active">True</property>
-                <property name="draw_indicator">True</property>
+                <property name="use_underline">1</property>
+                <property name="active">1</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkComboBoxText" id="existing_categories_combo">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">0</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkComboBoxText" id="within_existing_combo">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkComboBoxText" id="perms_combo">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">5</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">5</property>
-              </packing>
             </child>
             <child>
               <object class="GtkComboBoxText" id="size_combo">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">6</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">6</property>
-              </packing>
             </child>
             <child>
               <object class="GtkScrolledWindow" id="album_comment_scroll">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="shadow_type">in</property>
-                <child>
+                <property name="focusable">1</property>
+                <property name="child">
                   <object class="GtkTextView" id="album_comment">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
+                    <property name="focusable">1</property>
                     <property name="wrap_mode">word</property>
                   </object>
-                </child>
+                </property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">3</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">3</property>
-              </packing>
             </child>
             <child>
-              <object class="GtkRadioButton" id="create_new_radio">
+              <object class="GtkCheckButton" id="create_new_radio">
                 <property name="label" translatable="yes">A _new album named</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
                 <property name="halign">end</property>
-                <property name="use_underline">True</property>
-                <property name="active">True</property>
-                <property name="draw_indicator">True</property>
+                <property name="use_underline">1</property>
+                <property name="active">1</property>
                 <property name="group">use_existing_radio</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="new_category_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="focusable">1</property>
                 <property name="invisible_char">●</property>
+                <layout>
+                  <property name="column">1</property>
+                  <property name="row">1</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">1</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="within_existing_label">
-                <property name="visible">True</property>
-                <property name="sensitive">False</property>
-                <property name="can_focus">False</property>
+                <property name="sensitive">0</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">within category</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">2</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="album_comment_label">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
                 <property name="halign">end</property>
                 <property name="valign">start</property>
                 <property name="label" translatable="yes">Album comment</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">3</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">Photos will be _visible by</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
                 <property name="mnemonic_widget">perms_combo</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">5</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">5</property>
-              </packing>
             </child>
             <child>
               <object class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
                 <property name="halign">end</property>
                 <property name="label" translatable="yes">Photo size</property>
+                <layout>
+                  <property name="column">0</property>
+                  <property name="row">6</property>
+                </layout>
               </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">6</property>
-              </packing>
             </child>
             <child>
               <placeholder/>
@@ -192,115 +153,62 @@
               <placeholder/>
             </child>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
         </child>
         <child>
           <object class="GtkCheckButton" id="strip_metadata_check">
             <property name="label" translatable="yes">_Remove location, camera, and other identifying 
information before uploading</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
+            <property name="focusable">1</property>
             <property name="halign">start</property>
-            <property name="use_underline">True</property>
-            <property name="draw_indicator">True</property>
+            <property name="use_underline">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
         </child>
         <child>
           <object class="GtkCheckButton" id="title_as_comment_check">
             <property name="label" translatable="yes">_If a title is set and comment unset, use title as 
comment</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
+            <property name="focusable">1</property>
             <property name="halign">start</property>
-            <property name="use_underline">True</property>
-            <property name="draw_indicator">True</property>
+            <property name="use_underline">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">3</property>
-          </packing>
         </child>
         <child>
           <object class="GtkCheckButton" id="no_upload_tags_check">
             <property name="label" translatable="yes">_Do no upload tags</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
+            <property name="focusable">1</property>
             <property name="halign">start</property>
-            <property name="use_underline">True</property>
-            <property name="draw_indicator">True</property>
+            <property name="use_underline">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">4</property>
-          </packing>
         </child>
         <child>
           <object class="GtkCheckButton" id="no_upload_ratings_check">
             <property name="label" translatable="yes">_Do not upload ratings</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
+            <property name="focusable">1</property>
             <property name="halign">start</property>
-            <property name="use_underline">True</property>
-            <property name="draw_indicator">True</property>
+            <property name="use_underline">1</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">5</property>
-          </packing>
         </child>
         <child>
-          <object class="GtkButtonBox" id="hbuttonbox1">
+          <object class="GtkBox" id="hbuttonbox1">
+            <property name="vexpand">1</property>
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
               <object class="GtkButton" id="logout_button">
                 <property name="label" translatable="yes">Logout</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="focusable">1</property>
+                <property name="receives_default">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkButton" id="publish_button">
                 <property name="label" translatable="yes">Publish</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="focusable">1</property>
+                <property name="receives_default">1</property>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
             </child>
           </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">6</property>
-          </packing>
         </child>
       </object>
-    </child>
+    </property>
     <child type="titlebar">
       <placeholder/>
     </child>
diff --git a/plugins/shotwell-publishing/shotwell-publishing.vala 
b/plugins/shotwell-publishing/shotwell-publishing.vala
index 5cebf0e3..c44fc2b8 100644
--- a/plugins/shotwell-publishing/shotwell-publishing.vala
+++ b/plugins/shotwell-publishing/shotwell-publishing.vala
@@ -30,22 +30,22 @@ private class ShotwellPublishingCoreServices : Object, Spit.Module {
 
 #if HAVE_FLICKR
         if (authenicators.contains("flickr")) {
-            pluggables += new FlickrService(resource_directory);
+            //pluggables += new FlickrService(resource_directory);
         }
 #endif
 
 #if HAVE_YOUTUBE
         if (authenicators.contains("youtube")) {
-            pluggables += new YouTubeService(resource_directory);
+            //pluggables += new YouTubeService(resource_directory);
         }
 #endif
 
 #if HAVE_PIWIGO
-        pluggables += new PiwigoService(resource_directory);
+        pluggables += new PiwigoService();
 #endif
 
 #if HAVE_TUMBLR
-        pluggables += new TumblrService(module_file.get_parent());
+        pluggables += new TumblrService();
 #endif
     }
     


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]