[Libreoffice-commits] core.git: 2 commits - svx/inc svx/source sysui/desktop

David Tardon dtardon at redhat.com
Thu Feb 14 22:31:49 PST 2013


 svx/inc/svx/svdundo.hxx          |    9 +++++
 svx/source/svdraw/svdundo.cxx    |   62 ++++++++++++++++++++++++++++++++++++++-
 sysui/desktop/share/translate.pl |   25 ++++++++-------
 3 files changed, 84 insertions(+), 12 deletions(-)

New commits:
commit 4a6f1853a2a15b938575406feada108443257536
Author: David Tardon <dtardon at redhat.com>
Date:   Fri Feb 15 07:28:39 2013 +0100

    fdo#58283 produce all translations for desktop files
    
    Change-Id: Ie97e1ae7b2cc059630cba682a051eefff3ca044b

diff --git a/sysui/desktop/share/translate.pl b/sysui/desktop/share/translate.pl
index f6255df..200f6a8 100644
--- a/sysui/desktop/share/translate.pl
+++ b/sysui/desktop/share/translate.pl
@@ -76,6 +76,8 @@ while (<SOURCE>) {
         # For every section in the specified ulf file there should exist
         # a template file in $workdir ..
         $entry{'outfile'} = "$workdir/$prefix$template.$ext";
+        my %translations;
+        $entry{'translations'} = \%translations;
         $templates{$template} = \%entry;
     } else {
         # split locale = "value" into 2 strings
@@ -93,8 +95,7 @@ while (<SOURCE>) {
 
             $locale=~s/-/_/;
 
-            $templates{$template}->{'locale'} = $locale;
-            $templates{$template}->{'value'} = $value;
+            $templates{$template}->{'translations'}->{$locale} = $value;
         }
     }
 }
@@ -125,15 +126,17 @@ foreach $template (keys %templates) {
         $keyline =~ s/^$key/$outkey/;
         print OUTFILE $keyline;
         if (/$key/) {
-            my $locale = $templates{$template}->{'locale'};
-            my $value = $templates{$template}->{'value'};
-            print "locale is $locale\n";
-            print "value is $value\n";
-            if ($value) {
-                if ($ext eq "desktop") {
-                    print OUTFILE "$outkey\[$locale\]=$value\n";
-                } else {
-                    print OUTFILE "\t\[$locale\]$outkey=$value\n";
+            my $translations = $templates{$template}->{'translations'};
+            foreach my $locale (keys %{$translations}) {
+                my $value = $translations->{$locale};
+                print "locale is $locale\n";
+                print "value is $value\n";
+                if ($value) {
+                    if ($ext eq "desktop") {
+                        print OUTFILE "$outkey\[$locale\]=$value\n";
+                    } else {
+                        print OUTFILE "\t\[$locale\]$outkey=$value\n";
+                    }
                 }
             }
         }
commit 115054fef08998c56cba8f14472df1d15007f635
Author: David Tardon <dtardon at redhat.com>
Date:   Wed Feb 13 08:52:52 2013 +0100

    fdo#34548 don't crash on undoing text frame removal
    
    Change-Id: I48b95c6c0cbfb2f4c4b09cc90b254b96de40b3e9

diff --git a/svx/inc/svx/svdundo.hxx b/svx/inc/svx/svdundo.hxx
index 0d3713e..2221164 100644
--- a/svx/inc/svx/svdundo.hxx
+++ b/svx/inc/svx/svdundo.hxx
@@ -253,6 +253,10 @@ public:
 //************************************************************
 
 class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj {
+    class ObjListListener;
+    friend class ObjListListener;
+
+private:
     bool                        bOwner;
 
 protected:
@@ -262,6 +266,7 @@ protected:
     sal_uInt32                      nOrdNum;
     // Bei einem Undo/Redo findet moeglicherweise Uebereignung des Objektes
     // statt. Im Dtor wird das Obj deleted, wenn bOwner==TRUE
+    ObjListListener*            m_pListener;
 
 protected:
     SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect = false);
@@ -270,6 +275,10 @@ protected:
     void SetView(SdrView* pView1, SdrPageView* pPageView1) { pView=pView1; pPageView=pPageView1; }
     bool IsOwner() { return bOwner; }
     void SetOwner(bool bNew);
+
+private:
+    sal_uInt32 GetOrdNum() const;
+    void SetOrdNum(sal_uInt32 nOrdNum_);
 };
 
 //************************************************************
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index 452761d..c1e4b4d 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -18,6 +18,8 @@
  */
 
 
+#include <svl/lstner.hxx>
+
 #include <svx/svdundo.hxx>
 #include "svx/svditext.hxx"
 #include <svx/svdotext.hxx>
@@ -655,11 +657,55 @@ OUString SdrUndoGeoObj::GetComment() const
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
+class SdrUndoObjList::ObjListListener : public SfxListener
+{
+public:
+    ObjListListener(SdrUndoObjList& rThat, SdrObject& rObject, SfxBroadcaster& rBroadcaster);
+    ~ObjListListener();
+
+private:
+    virtual void Notify(SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
+
+private:
+    SdrUndoObjList& m_rThat;
+    SdrObject& m_rObject;
+    SfxBroadcaster* m_pBroadcaster;
+};
+
+SdrUndoObjList::ObjListListener::ObjListListener(SdrUndoObjList& rThat, SdrObject& rObject, SfxBroadcaster& rBroadcaster)
+    : m_rThat(rThat)
+    , m_rObject(rObject)
+    , m_pBroadcaster(&rBroadcaster)
+{
+    StartListening(*m_pBroadcaster);
+}
+
+SdrUndoObjList::ObjListListener::~ObjListListener()
+{
+    if (m_pBroadcaster)
+        EndListening(*m_pBroadcaster);
+}
+
+void SdrUndoObjList::ObjListListener::Notify(SfxBroadcaster&, const SfxHint& rHint)
+{
+    const SdrHint* const pSdrHint(dynamic_cast<const SdrHint*>(&rHint));
+    if (pSdrHint)
+    {
+        if ((pSdrHint->GetObject() == &m_rObject) && (pSdrHint->GetKind() == HINT_OBJCHG))
+        {
+            const sal_uInt32 nNewOrdNum(m_rObject.GetOrdNum());
+            if (nNewOrdNum != m_rThat.GetOrdNum())
+                m_rThat.SetOrdNum(nNewOrdNum);
+        }
+    }
+}
+
 SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
 :   SdrUndoObj(rNewObj),
     bOwner(sal_False),
     pView(NULL),
-    pPageView(NULL)
+    pPageView(NULL),
+    m_pListener(NULL)
 {
     pObjList=pObj->GetObjList();
     if (bOrdNumDirect) {
@@ -667,10 +713,14 @@ SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
     } else {
         nOrdNum=pObj->GetOrdNum();
     }
+
+    m_pListener = new ObjListListener(*this, *pObj, *pObjList->GetModel());
 }
 
 SdrUndoObjList::~SdrUndoObjList()
 {
+    delete m_pListener;
+
     if (pObj!=NULL && IsOwner())
     {
         // Attribute have to go back to the regular Pool
@@ -686,6 +736,16 @@ void SdrUndoObjList::SetOwner(bool bNew)
     bOwner = bNew;
 }
 
+sal_uInt32 SdrUndoObjList::GetOrdNum() const
+{
+    return nOrdNum;
+}
+
+void SdrUndoObjList::SetOrdNum(sal_uInt32 nOrdNum_)
+{
+    nOrdNum = nOrdNum_;
+}
+
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
 void SdrUndoRemoveObj::Undo()


More information about the Libreoffice-commits mailing list