Index: pkg/win32/Makefile.am
===================================================================
--- pkg/win32/Makefile.am	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ pkg/win32/Makefile.am	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -10,6 +10,7 @@
 EXTRA_DIST = \
     $(srcdir)/Make.bat \
     $(srcdir)/README.txt \
+    $(srcdir)/upgrade.bat \
     $(srcdir)/resources/banner.bmp \
     $(srcdir)/resources/new.bmp \
     $(srcdir)/resources/up.bmp \
Index: pkg/win32/upgrade.bat
===================================================================
--- pkg/win32/upgrade.bat	(.../tags/REL-1_4_1/pgadmin3)	(revision 0)
+++ pkg/win32/upgrade.bat	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -0,0 +1,23 @@
+@echo off
+cls
+echo This file will upgrade your pgAdmin III installation.
+echo.
+echo You must have pgAdmin III v1.4.x installed 
+echo from the official MSI installation to use this upgrade path.
+echo.
+echo If pgAdmin III or any of it's components are in use
+echo a reboot will be required once the upgrade is completed.
+echo.
+echo.
+echo Press Ctrl-C to abort the upgrade or
+pause
+
+REM Parameters described:
+REM  /i pgadmin3.msi           - pick MSI file to install. All properties
+REM                              will be read from existing installation.
+REM  REINSTALLMODE=vamus       - reinstall all files, regardless of version.
+REM                              This makes sure documentation and other
+REM                              non-versioned files are updated.
+REM  REINSTALL=ALL             - Reinstall all features that were previously
+REM                              installed with the new version.
+msiexec /i pgadmin3.msi REINSTALLMODE=vamus REINSTALL=ALL /qr
Index: src/include/ctl/ctlComboBox.h
===================================================================
--- src/include/ctl/ctlComboBox.h	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/include/ctl/ctlComboBox.h	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -25,7 +25,7 @@
 public:
     ctlComboBoxFix(wxWindow *wnd, int id, wxPoint pos, wxSize siz, long attr);
 
-#if wxCHECK_VERSION(2,6,2)
+#if wxCHECK_VERSION(2,6,2) && !defined(__WXMAC__)
     // we have GetCurrentSelection() in wxChoice, implementing the old GetSelection() semantics
 #else
     int GetCurrentSelection() const { return wxComboBox::GetSelection(); }
@@ -52,11 +52,6 @@
 #ifdef __WXMSW__
     wxString GetValue() const { return wxGetWindowText(GetHwnd()); }
 #endif
-
-
-private:
-    // to prevent using it; use GetCurrentSelection() instead
-    int GetSelection() const { return -1; }
 };
 
 class ctlComboBox : public ctlComboBoxFix
Index: src/schema/pgLanguage.cpp
===================================================================
--- src/schema/pgLanguage.cpp	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/schema/pgLanguage.cpp	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -47,7 +47,12 @@
         if (GetTrusted())
             sql += wxT("TRUSTED ");
         sql += wxT("PROCEDURAL LANGUAGE '") + GetName() 
-            +  wxT("'\n  HANDLER ") + GetHandlerProc() + wxT(";\n")
+            +  wxT("'\n  HANDLER ") + GetHandlerProc();
+
+        if (!GetValidatorProc().IsEmpty())
+            sql += wxT("\n  VALIDATOR ") + GetValidatorProc();
+        
+        sql += wxT(";\n")
             +  GetGrant(wxT("X"), wxT("LANGUAGE ") + GetQuotedFullIdentifier());
 
     }
Index: src/schema/pgSchema.cpp
===================================================================
--- src/schema/pgSchema.cpp	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/schema/pgSchema.cpp	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -163,8 +163,7 @@
 
     pgSet *schemas = collection->GetDatabase()->ExecuteSet(
         wxT("SELECT CASE WHEN nspname LIKE 'pg\\_temp\\_%%' THEN 1\n")
-        wxT("            WHEN (nsp.oid<") + NumToStr(collection->GetServer()->GetLastSystemOID()) +
-                         wxT(" OR nspname like 'pg\\_%') AND nspname != 'public' THEN 0\n")
+        wxT("            WHEN (nspname LIKE 'pg\\_%' OR nspname = 'information_schema') THEN 0\n")
         wxT("            ELSE 3 END AS nsptyp,\n")
         wxT("       nsp.nspname, nsp.oid, pg_get_userbyid(nspowner) AS namespaceowner, nspacl, description,")
         wxT("       has_schema_privilege(nsp.oid, 'CREATE') as cancreate\n")
Index: src/schema/pgObject.cpp
===================================================================
--- src/schema/pgObject.cpp	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/schema/pgObject.cpp	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -162,7 +162,7 @@
 bool pgObject::UpdateIcon(ctlTree *browser)
 {
     int icon=GetIconId();
-    if (browser->GetItemImage(GetId(), wxTreeItemIcon_Normal) != icon)
+    if (GetId() && browser->GetItemImage(GetId(), wxTreeItemIcon_Normal) != icon)
     {
         browser->SetItemImage(GetId(), GetIconId(), wxTreeItemIcon_Normal);
         browser->SetItemImage(GetId(), GetIconId(), wxTreeItemIcon_Selected);
Index: src/slony/include/slSubscription.h
===================================================================
--- src/slony/include/slSubscription.h	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/slony/include/slSubscription.h	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -59,6 +59,7 @@
 
   
     bool CanCreate();
+    bool CanDrop();
 
     bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
     wxString GetSql(ctlTree *browser);
Index: src/slony/slSubscription.cpp
===================================================================
--- src/slony/slSubscription.cpp	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/slony/slSubscription.cpp	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -61,6 +61,12 @@
 }
 
 
+bool slSubscription::CanDrop()
+{
+    return GetReceiverId() == GetCluster()->GetLocalNodeID();
+}
+
+
 wxString slSubscription::GetSql(ctlTree *browser)
 {
     if (sql.IsNull())
Index: src/slony/slNode.cpp
===================================================================
--- src/slony/slNode.cpp	(.../tags/REL-1_4_1/pgadmin3)	(revision 4851)
+++ src/slony/slNode.cpp	(.../branches/REL-1_4_0_PATCHES/pgadmin3)	(revision 4851)
@@ -171,7 +171,7 @@
                 wxT("       st_last_event_ts - st_last_received_ts AS eventlag,")
                 wxT("       ev_seqno, ev_type || ' ' || COALESCE(ev_data1, '') AS hanging\n")
                 wxT("  FROM ") + GetCluster()->GetSchemaPrefix() + wxT("sl_status\n")
-                wxT("  LEFT JOIN ") + GetCluster()->GetSchemaPrefix() + wxT("sl_event ON ev_seqno=\n")
+                wxT("  LEFT JOIN ") + GetCluster()->GetSchemaPrefix() + wxT("sl_event ON ev_origin=st_origin AND ev_seqno=\n")
                 wxT("         (SELECT MIN(ev_seqno) FROM ") + GetCluster()->GetSchemaPrefix() + wxT("sl_event WHERE ev_seqno > st_last_received)\n")
                 wxT(" WHERE st_origin = ") + NumToStr(GetCluster()->GetLocalNodeID()) + wxT("\n")
                 wxT("   AND st_received = ") + NumToStr(GetSlId()));
@@ -331,7 +331,7 @@
         wxT("       CASE WHEN st_lag_num_events > 0 THEN st_last_event_ts - st_last_received_ts END AS eventlag,")
         wxT("       ev_seqno, ev_type || ' ' || COALESCE(ev_data1, '') AS hanging\n")
         wxT("  FROM ") + GetCluster()->GetSchemaPrefix() + wxT("sl_status\n")
-        wxT("  LEFT JOIN ") + GetCluster()->GetSchemaPrefix() + wxT("sl_event ON ev_seqno=\n")
+        wxT("  LEFT JOIN ") + GetCluster()->GetSchemaPrefix() + wxT("sl_event ON ev_origin=st_origin AND ev_seqno=\n")
         wxT("         (SELECT MIN(ev_seqno) FROM ") + GetCluster()->GetSchemaPrefix() + wxT("sl_event WHERE ev_seqno > st_last_received)\n")
         wxT(" WHERE st_origin = ") + NumToStr(GetCluster()->GetLocalNodeID()));
 
