update to 5.3.0 alpha1

f41
David Tardon 8 years ago
parent b1e073e624
commit 84d23d6932

13
.gitignore vendored

@ -1,3 +1,4 @@
/0fb1bb06d60d7708abc4797008209bcc-xmlsec1-1.2.22.tar.gz
/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
@ -7,11 +8,12 @@
/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
/4b87018f7fff1d054939d19920b751a0-collada2gltf-master-cb1d97788a.tar.bz2
/libcmis-0.5.1.tar.gz
/liborcus-0.11.2.tar.gz
/liborcus-0.12.1.tar.gz
/libpagemaker-0.0.3.tar.bz2
/libwps-0.4.3.tar.bz2
/mdds-1.2.0.tar.bz2
/ce12af00283eb90d9281956524250d6e-xmlsec1-1.2.20.tar.gz
/libstaroffice-0.0.2.tar.bz2
/libwps-0.4.4.tar.bz2
/libzmf-0.0.1.tar.bz2
/mdds-1.2.2.tar.bz2
/libreoffice-5.2.0.0.alpha1.tar.xz
/libreoffice-help-5.2.0.0.alpha1.tar.xz
/libreoffice-translations-5.2.0.0.alpha1.tar.xz
@ -48,3 +50,6 @@
/libreoffice-5.2.3.1.tar.xz
/libreoffice-help-5.2.3.1.tar.xz
/libreoffice-translations-5.2.3.1.tar.xz
/libreoffice-5.3.0.0.alpha1.tar.xz
/libreoffice-help-5.3.0.0.alpha1.tar.xz
/libreoffice-translations-5.3.0.0.alpha1.tar.xz

@ -1,56 +0,0 @@
From 872c5e0c807ae248387ee425615e4c8080d01221 Mon Sep 17 00:00:00 2001
From: Jaskaran Singh <jvsg1303@gmail.com>
Date: Thu, 28 Jul 2016 14:00:46 +0530
Subject: [PATCH] Add odf strikeout to orcus interface
Change-Id: Ibf8d1e7b0272fe4112fda0249eafef1aa5438d9a
---
sc/source/filter/inc/orcusinterface.hxx | 7 +++
sc/source/filter/orcus/interface.cxx | 88 +++++++++++++++++++++++++++++----
2 files changed, 85 insertions(+), 10 deletions(-)
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 9754ea4..9afc218 100644
--- a/sc/source/filter/inc/orcusinterface.hxx
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -390,6 +393,10 @@ public:
orcus::spreadsheet::color_elem_t red,
orcus::spreadsheet::color_elem_t green,
orcus::spreadsheet::color_elem_t blue) override;
+ virtual void set_strikethrough_style(orcus::spreadsheet::strikethrough_style_t s) override;
+ virtual void set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t s) override;
+ virtual void set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t s) override;
+ virtual void set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t s) override;
virtual size_t commit_font() override;
// fill
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index 1be81262..5f30120 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -1141,6 +1149,22 @@ void ScOrcusStyles::set_font_color(orcus::spreadsheet::color_elem_t alpha,
maCurrentFont.maColor = Color(alpha, red, green, blue);
}
+void ScOrcusStyles::set_strikethrough_style(orcus::spreadsheet::strikethrough_style_t /*s*/)
+{
+}
+
+void ScOrcusStyles::set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t /*s*/)
+{
+}
+
+void ScOrcusStyles::set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t /*s*/)
+{
+}
+
+void ScOrcusStyles::set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t /*s*/)
+{
+}
+
size_t ScOrcusStyles::commit_font()
{
SAL_INFO("sc.orcus.style", "commit font");
--
2.9.3

@ -1,110 +0,0 @@
From 5a2b92977df1ce28f99b1a391fdfd3a37bd727f9 Mon Sep 17 00:00:00 2001
From: Jaskaran Singh <jvsg1303@gmail.com>
Date: Sun, 26 Jun 2016 13:13:42 +0530
Subject: [PATCH] Declare font, border, protection orcus interface methods
Change-Id: I486d861ba3c2c763964cdc3af2312661ef1a533d
---
sc/source/filter/inc/orcusinterface.hxx | 10 +++++++++
sc/source/filter/orcus/interface.cxx | 38 +++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 3046b44..521b388 100644
--- a/sc/source/filter/inc/orcusinterface.hxx
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -357,6 +357,13 @@ public:
virtual void set_font_name(const char* s, size_t n) override;
virtual void set_font_size(double point) override;
virtual void set_font_underline(orcus::spreadsheet::underline_t e) override;
+ virtual void set_font_underline_width(orcus::spreadsheet::underline_width_t e) override;
+ virtual void set_font_underline_mode(orcus::spreadsheet::underline_mode_t e) override;
+ virtual void set_font_underline_type(orcus::spreadsheet::underline_type_t e) override;
+ virtual void set_font_underline_color(orcus::spreadsheet::color_elem_t alpha,
+ orcus::spreadsheet::color_elem_t red,
+ orcus::spreadsheet::color_elem_t green,
+ orcus::spreadsheet::color_elem_t blue) override;
virtual void set_font_color( orcus::spreadsheet::color_elem_t alpha,
orcus::spreadsheet::color_elem_t red,
orcus::spreadsheet::color_elem_t green,
@@ -381,11 +388,14 @@ public:
orcus::spreadsheet::color_elem_t red,
orcus::spreadsheet::color_elem_t green,
orcus::spreadsheet::color_elem_t blue) override;
+ virtual void set_border_width(orcus::spreadsheet::border_direction_t dir, orcus::length_t width) override;
virtual size_t commit_border() override;
// cell protection
virtual void set_cell_hidden(bool b) override;
virtual void set_cell_locked(bool b) override;
+ virtual void set_cell_print_content(bool b) override;
+ virtual void set_cell_formula_hidden(bool b) override;
virtual size_t commit_cell_protection() override;
// number format
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index e8a2dba..dbeb6aa 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -961,6 +961,29 @@ void ScOrcusStyles::set_font_underline(orcus::spreadsheet::underline_t e)
}
}
+void ScOrcusStyles::set_font_underline_width(orcus::spreadsheet::underline_width_t /* e */)
+{
+
+}
+
+void ScOrcusStyles::set_font_underline_mode(orcus::spreadsheet::underline_mode_t /* e */)
+{
+
+}
+
+void ScOrcusStyles::set_font_underline_type(orcus::spreadsheet::underline_type_t /* e */)
+{
+
+}
+
+void ScOrcusStyles::set_font_underline_color(orcus::spreadsheet::color_elem_t /*alpha*/,
+ orcus::spreadsheet::color_elem_t /*red*/,
+ orcus::spreadsheet::color_elem_t /*green*/,
+ orcus::spreadsheet::color_elem_t /*blue*/)
+{
+
+}
+
void ScOrcusStyles::set_font_color(orcus::spreadsheet::color_elem_t alpha,
orcus::spreadsheet::color_elem_t red,
orcus::spreadsheet::color_elem_t green,
@@ -1035,6 +1058,11 @@ void ScOrcusStyles::set_border_color(orcus::spreadsheet::border_direction_t dir,
current_line.maColor = Color(alpha, red, green, blue);
}
+void ScOrcusStyles::set_border_width(orcus::spreadsheet::border_direction_t /* dir */, orcus::length_t /* width */)
+{
+
+}
+
size_t ScOrcusStyles::commit_border()
{
SAL_INFO("sc.orcus.style", "commit border");
@@ -1054,6 +1082,16 @@ void ScOrcusStyles::set_cell_locked(bool b)
maCurrentProtection.mbLocked = b;
}
+void ScOrcusStyles::set_cell_print_content(bool /* b */)
+{
+
+}
+
+void ScOrcusStyles::set_cell_formula_hidden(bool /* b */)
+{
+
+}
+
size_t ScOrcusStyles::commit_cell_protection()
{
SAL_INFO("sc.orcus.style", "commit cell protection");
--
2.9.3

@ -1,42 +0,0 @@
From 933ae1905617a2e2cc177a34a7060a2b26e5827c Mon Sep 17 00:00:00 2001
From: Jaskaran Singh <jvsg1303@gmail.com>
Date: Thu, 28 Jul 2016 15:40:22 +0530
Subject: [PATCH] Reform orcus interface to set border width
Change-Id: Ic93b334205221548e4bd7920551034b1ccee4fa8
---
sc/source/filter/inc/orcusinterface.hxx | 2 +-
sc/source/filter/orcus/interface.cxx | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 9afc218..f3520b4 100644
--- a/sc/source/filter/inc/orcusinterface.hxx
+++ b/sc/source/filter/inc/orcusinterface.hxx
@@ -417,7 +417,7 @@ public:
orcus::spreadsheet::color_elem_t red,
orcus::spreadsheet::color_elem_t green,
orcus::spreadsheet::color_elem_t blue) override;
- virtual void set_border_width(orcus::spreadsheet::border_direction_t dir, orcus::length_t width) override;
+ virtual void set_border_width(orcus::spreadsheet::border_direction_t dir, double val, orcus::length_unit_t unit) override;
virtual size_t commit_border() override;
// cell protection
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index 5f30120..ff8c7465 100644
--- a/sc/source/filter/orcus/interface.cxx
+++ b/sc/source/filter/orcus/interface.cxx
@@ -1318,8 +1318,8 @@ void ScOrcusStyles::set_border_color(orcus::spreadsheet::border_direction_t dir,
current_line.maColor = Color(alpha, red, green, blue);
}
-void ScOrcusStyles::set_border_width(orcus::spreadsheet::border_direction_t /* dir */, orcus::length_t /* width */)
+void ScOrcusStyles::set_border_width(orcus::spreadsheet::border_direction_t /* dir */, double /* val */, orcus::length_unit_t /* unit */)
{
}
size_t ScOrcusStyles::commit_border()
--
2.9.3

@ -1,93 +0,0 @@
From 962e0bb4b31265b046fe4fb57d3087e20f5fe4ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 12 Jul 2016 20:31:52 +0100
Subject: [PATCH] Related: rhbz#1351369 gtk3 clipboards have to live to end
once created
like the other platforms do
Change-Id: I31340254573d13dc808d1e3038e3a36ae97f6c22
---
vcl/inc/unx/gtk/gtkinst.hxx | 3 +++
vcl/unx/gtk3/gtk3gtkinst.cxx | 22 +++++++++++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx
index 6212d5d..01e8ca6 100644
--- a/vcl/inc/unx/gtk/gtkinst.hxx
+++ b/vcl/inc/unx/gtk/gtkinst.hxx
@@ -246,6 +246,9 @@ public:
private:
std::vector<GtkSalTimer *> m_aTimers;
+#if GTK_CHECK_VERSION(3,0,0)
+ std::unordered_map< GdkAtom, css::uno::Reference<css::uno::XInterface> > m_aClipboards;
+#endif
bool IsTimerExpired();
bool bNeedsInit;
cairo_font_options_t* m_pLastCairoFontOptions;
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index b5db25d..3cc4046 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -536,7 +536,11 @@ VclGtkClipboard::~VclGtkClipboard()
{
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId);
- ClipboardClear(nullptr);
+ if (!m_aGtkTargets.empty())
+ {
+ gtk_clipboard_clear(clipboard);
+ }
+ assert(m_aGtkTargets.empty());
}
std::vector<GtkTargetEntry> VclToGtkHelper::FormatsToGtk(const css::uno::Sequence<css::datatransfer::DataFlavor> &rFormats)
@@ -587,7 +591,6 @@ void VclGtkClipboard::setContents(
{
osl::ClearableMutexGuard aGuard( m_aMutex );
Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner );
- bool bOwnerChange = (xOldOwner.is() && xOldOwner != xClipboardOwner);
Reference< datatransfer::XTransferable > xOldContents( m_aContents );
m_aContents = xTrans;
m_aOwner = xClipboardOwner;
@@ -596,8 +599,10 @@ void VclGtkClipboard::setContents(
datatransfer::clipboard::ClipboardEvent aEv;
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
- if (bOwnerChange)
+ if (!m_aGtkTargets.empty())
+ {
gtk_clipboard_clear(clipboard);
+ }
assert(m_aGtkTargets.empty());
if (m_aContents.is())
{
@@ -624,7 +629,7 @@ void VclGtkClipboard::setContents(
aGuard.clear();
- if (bOwnerChange)
+ if (xOldOwner.is() && xOldOwner != xClipboardOwner)
xOldOwner->lostOwnership( this, xOldContents );
for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it =
aListeners.begin(); it != aListeners.end() ; ++it )
@@ -672,7 +677,14 @@ Reference< XInterface > GtkInstance::CreateClipboard(const Sequence< Any >& argu
GdkAtom nSelection = (sel == "CLIPBOARD") ? GDK_SELECTION_CLIPBOARD : GDK_SELECTION_PRIMARY;
- return Reference< XInterface >( static_cast<cppu::OWeakObject *>(new VclGtkClipboard(nSelection)) );
+ auto it = m_aClipboards.find(nSelection);
+ if (it != m_aClipboards.end())
+ return it->second;
+
+ Reference<XInterface> xClipboard(static_cast<cppu::OWeakObject *>(new VclGtkClipboard(nSelection)));
+ m_aClipboards[nSelection] = xClipboard;
+
+ return xClipboard;
}
GtkDropTarget::GtkDropTarget()
--
2.7.4

@ -1,115 +0,0 @@
From a0e049ba62adc036f42973807d528ce27c8647cf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 1 Sep 2016 15:50:20 +0100
Subject: [PATCH] Related: rhbz#1362451 avoid recursive ownerchanged handling
during ownerchange
Change-Id: Id9c12b7ce6458348890d7c7ff7fdb2cd37c4601c
---
vcl/unx/gtk3/gtk3gtkinst.cxx | 55 ++++++++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 23 deletions(-)
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 10c5c7f..7202b46 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -364,6 +364,29 @@ namespace
}
}
+namespace
+{
+ void ClipboardGetFunc(GtkClipboard *clipboard, GtkSelectionData *selection_data,
+ guint info,
+ gpointer user_data_or_owner)
+ {
+ VclGtkClipboard* pThis = static_cast<VclGtkClipboard*>(user_data_or_owner);
+ pThis->ClipboardGet(clipboard, selection_data, info);
+ }
+
+ void ClipboardClearFunc(GtkClipboard *clipboard, gpointer user_data_or_owner)
+ {
+ VclGtkClipboard* pThis = static_cast<VclGtkClipboard*>(user_data_or_owner);
+ pThis->ClipboardClear(clipboard);
+ }
+
+ void handle_owner_change(GtkClipboard *clipboard, GdkEvent *event, gpointer user_data)
+ {
+ VclGtkClipboard* pThis = static_cast<VclGtkClipboard*>(user_data);
+ pThis->OwnerPossiblyChanged(clipboard, event);
+ }
+}
+
void VclGtkClipboard::OwnerPossiblyChanged(GtkClipboard* clipboard, GdkEvent* /*event*/)
{
if (!m_aContents.is())
@@ -376,6 +399,10 @@ void VclGtkClipboard::OwnerPossiblyChanged(GtkClipboard* clipboard, GdkEvent* /*
//our pid, in which case it's us.
bool bSelf = false;
+ //disconnect and reconnect after gtk_clipboard_wait_for_targets to
+ //avoid possible recursion
+ g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId);
+
OString sTunnel = "application/x-libreoffice-internal-id-" + getPID();
GdkAtom *targets;
gint n_targets;
@@ -394,6 +421,9 @@ void VclGtkClipboard::OwnerPossiblyChanged(GtkClipboard* clipboard, GdkEvent* /*
g_free(targets);
}
+ m_nOwnerChangedSignalId = g_signal_connect(clipboard, "owner-change",
+ G_CALLBACK(handle_owner_change), this);
+
if (!bSelf)
{
//null out m_aContents to return control to the system-one which
@@ -486,29 +516,6 @@ void VclToGtkHelper::setSelectionData(const Reference<css::datatransfer::XTransf
aData.getLength());
}
-namespace
-{
- void ClipboardGetFunc(GtkClipboard *clipboard, GtkSelectionData *selection_data,
- guint info,
- gpointer user_data_or_owner)
- {
- VclGtkClipboard* pThis = reinterpret_cast<VclGtkClipboard*>(user_data_or_owner);
- pThis->ClipboardGet(clipboard, selection_data, info);
- }
-
- void ClipboardClearFunc(GtkClipboard *clipboard, gpointer user_data_or_owner)
- {
- VclGtkClipboard* pThis = reinterpret_cast<VclGtkClipboard*>(user_data_or_owner);
- pThis->ClipboardClear(clipboard);
- }
-
- void handle_owner_change(GtkClipboard *clipboard, GdkEvent *event, gpointer user_data)
- {
- VclGtkClipboard* pThis = static_cast<VclGtkClipboard*>(user_data);
- pThis->OwnerPossiblyChanged(clipboard, event);
- }
-}
-
VclGtkClipboard::VclGtkClipboard(GdkAtom nSelection)
: cppu::WeakComponentImplHelper<datatransfer::clipboard::XSystemClipboard,
datatransfer::clipboard::XFlushableClipboard, XServiceInfo>
@@ -539,6 +546,7 @@ VclGtkClipboard::~VclGtkClipboard()
if (!m_aGtkTargets.empty())
{
gtk_clipboard_clear(clipboard);
+ ClipboardClear(clipboard);
}
assert(m_aGtkTargets.empty());
}
@@ -602,6 +610,7 @@ void VclGtkClipboard::setContents(
if (!m_aGtkTargets.empty())
{
gtk_clipboard_clear(clipboard);
+ ClipboardClear(clipboard);
}
assert(m_aGtkTargets.empty());
if (m_aContents.is())
--
2.7.4

@ -1,262 +0,0 @@
From 3af38da4f0cb6b6341efad280c73a7733de42bea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Fri, 24 Jun 2016 15:06:36 +0100
Subject: [PATCH] Resolves: rhbz#1326304 cannot detect loss of wayland
clipboard ownership
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
gtk_clipboard_get_owner always returns what you set with
gtk_clipboard_set_with_owner and that doesn't change if some other
application takes over the clipboard
The "owner-change" signal doesn't contain any useful data under wayland,
and doesn't fire when you'd expect either, just when the app becomes
active or gets focus or something like that. So you get it when you
do have the clipboard and when you don't, so that's no use either to
detect loss of clipboard ownership
So, forget about clipboard ownership, and always take the data to
be pasted from the system clipboard, so when we are pasting from ourselves
its "paste"->m_aSystemContents->gtk->"copy"->m_aOurContents
Undoubtedly something else will break now
Change-Id: I32f2e1a2cc3310687f61a094fdfa940fa0cfcc39
Resolves: rhbz#1350478 identify that we own the selection with a unique target
so we can tell that we own the selection in the absence of reliable selection
ownership notifications under wayland
Note that gnome#768177 means that requests for CLIPBOARD targets after
requests for PRIMARY targets can time out, which is why my attempts at
doing this before giving up with
commit 88cd9dd591d7921e5bce33c170b457ae5aa871bb
Author: Caolán McNamara <caolanm@redhat.com>
Date: Fri Jun 24 15:06:36 2016 +0100
Resolves: rhbz#1326304 cannot detect loss of wayland clipboard ownership
didn't work.
Change-Id: I1154899e478b6e0cc6f70aa0c90c26663299072c
(cherry picked from commit 88f7aae022bedd61588424a11bbc033217ba4e43)
---
vcl/unx/gtk3/gtk3gtkinst.cxx | 124 ++++++++++++++++++++++---------------------
1 file changed, 63 insertions(+), 61 deletions(-)
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index ed64ded..8b01166 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -238,47 +238,6 @@ public:
}
};
-//We want to use gtk_clipboard_get_owner own owner-change to distinguish between
-//us gaining the clipboard ownership vs losing it. To do that we need to use
-//gtk_clipboard_set_with_owner and to do that we need a GObject, so define
-//one here for that purpose and just give it a VclGtkClipboard* member
-class VclGtkClipboard;
-
-struct ClipboardOwner
-{
- GObject parent_instance;
-
- /* instance members */
- VclGtkClipboard* m_pThis;
-};
-
-struct ClipboardOwnerClass
-{
- GObjectClass parent_class;
-
- /* class members */
-};
-
-#define CLIPBOARD_OWNER_OBJECT (clipboard_owner_get_type ())
-#define CLIPBOARD_OWNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLIPBOARD_OWNER_OBJECT, ClipboardOwner))
-
-#ifdef __GNUC__
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wunused-function"
-#endif
-G_DEFINE_TYPE(ClipboardOwner, clipboard_owner, G_TYPE_OBJECT);
-#ifdef __GNUC__
-#pragma GCC diagnostic pop
-#endif
-
-static void clipboard_owner_class_init (ClipboardOwnerClass *)
-{
-}
-
-static void clipboard_owner_init(ClipboardOwner *)
-{
-}
-
class VclGtkClipboard :
public cppu::WeakComponentImplHelper<
datatransfer::clipboard::XSystemClipboard,
@@ -287,7 +246,6 @@ class VclGtkClipboard :
{
GdkAtom m_nSelection;
osl::Mutex m_aMutex;
- ClipboardOwner* m_pOwner;
gulong m_nOwnerChangedSignalId;
Reference<css::datatransfer::XTransferable> m_aContents;
Reference<css::datatransfer::clipboard::XClipboardOwner> m_aOwner;
@@ -349,7 +307,7 @@ public:
void ClipboardGet(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info);
void ClipboardClear(GtkClipboard *clipboard);
- void OwnerChanged(GtkClipboard *clipboard, GdkEvent *event);
+ void OwnerPossiblyChanged(GtkClipboard *clipboard, GdkEvent *event);
};
OUString VclGtkClipboard::getImplementationName() throw( RuntimeException, std::exception )
@@ -370,13 +328,13 @@ sal_Bool VclGtkClipboard::supportsService( const OUString& ServiceName ) throw(
Reference< css::datatransfer::XTransferable > VclGtkClipboard::getContents() throw( RuntimeException, std::exception )
{
- if (G_OBJECT(m_pOwner) != gtk_clipboard_get_owner(gtk_clipboard_get(m_nSelection)) &&
- !m_aContents.is())
+ if (!m_aContents.is())
{
//tdf#93887 This is the system clipboard/selection. We fetch it when we are not
//the owner of the clipboard and have not already fetched it.
m_aContents = new GtkClipboardTransferable(m_nSelection);
}
+
return m_aContents;
}
@@ -388,9 +346,55 @@ void VclGtkClipboard::ClipboardGet(GtkClipboard* /*clipboard*/, GtkSelectionData
m_aConversionHelper.setSelectionData(m_aContents, selection_data, info);
}
-void VclGtkClipboard::OwnerChanged(GtkClipboard* clipboard, GdkEvent* /*event*/)
+namespace
+{
+ const OString& getPID()
+ {
+ static OString sPID;
+ if (!sPID.getLength())
+ {
+ oslProcessIdentifier aProcessId = 0;
+ oslProcessInfo info;
+ info.Size = sizeof (oslProcessInfo);
+ if (osl_getProcessInfo(nullptr, osl_Process_IDENTIFIER, &info) == osl_Process_E_None)
+ aProcessId = info.Ident;
+ sPID = OString::number(aProcessId);
+ }
+ return sPID;
+ }
+}
+
+void VclGtkClipboard::OwnerPossiblyChanged(GtkClipboard* clipboard, GdkEvent* /*event*/)
{
- if (G_OBJECT(m_pOwner) != gtk_clipboard_get_owner(clipboard))
+ if (!m_aContents.is())
+ return;
+
+ //if gdk_display_supports_selection_notification is not supported, e.g. like
+ //right now under wayland, then you only get owner-changed nofications at
+ //opportune times when the selection might have changed. So here
+ //we see if the selection supports a dummy selection type identifying
+ //our pid, in which case it's us.
+ bool bSelf = false;
+
+ OString sTunnel = "application/x-libreoffice-internal-id-" + getPID();
+ GdkAtom *targets;
+ gint n_targets;
+ if (gtk_clipboard_wait_for_targets(clipboard, &targets, &n_targets))
+ {
+ for (gint i = 0; i < n_targets && !bSelf; ++i)
+ {
+ gchar* pName = gdk_atom_name(targets[i]);
+ if (strcmp(pName, sTunnel.getStr()) == 0)
+ {
+ bSelf = true;
+ }
+ g_free(pName);
+ }
+
+ g_free(targets);
+ }
+
+ if (!bSelf)
{
//null out m_aContents to return control to the system-one which
//will be retrieved if getContents is called again
@@ -488,20 +492,20 @@ namespace
guint info,
gpointer user_data_or_owner)
{
- VclGtkClipboard* pThis = CLIPBOARD_OWNER(user_data_or_owner)->m_pThis;
+ VclGtkClipboard* pThis = reinterpret_cast<VclGtkClipboard*>(user_data_or_owner);
pThis->ClipboardGet(clipboard, selection_data, info);
}
void ClipboardClearFunc(GtkClipboard *clipboard, gpointer user_data_or_owner)
{
- VclGtkClipboard* pThis = CLIPBOARD_OWNER(user_data_or_owner)->m_pThis;
+ VclGtkClipboard* pThis = reinterpret_cast<VclGtkClipboard*>(user_data_or_owner);
pThis->ClipboardClear(clipboard);
}
void handle_owner_change(GtkClipboard *clipboard, GdkEvent *event, gpointer user_data)
{
VclGtkClipboard* pThis = static_cast<VclGtkClipboard*>(user_data);
- pThis->OwnerChanged(clipboard, event);
+ pThis->OwnerPossiblyChanged(clipboard, event);
}
}
@@ -514,8 +518,6 @@ VclGtkClipboard::VclGtkClipboard(GdkAtom nSelection)
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
m_nOwnerChangedSignalId = g_signal_connect(clipboard, "owner-change",
G_CALLBACK(handle_owner_change), this);
- m_pOwner = CLIPBOARD_OWNER(g_object_new(CLIPBOARD_OWNER_OBJECT, nullptr));
- m_pOwner->m_pThis = this;
}
void VclGtkClipboard::flushClipboard()
@@ -534,7 +536,6 @@ VclGtkClipboard::~VclGtkClipboard()
{
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId);
- g_object_unref(m_pOwner);
ClipboardClear(nullptr);
}
@@ -599,15 +600,16 @@ void VclGtkClipboard::setContents(
std::vector<GtkTargetEntry> aGtkTargets(m_aConversionHelper.FormatsToGtk(aFormats));
if (!aGtkTargets.empty())
{
- //if there was a previous gtk_clipboard_set_with_data call then
- //ClipboardClearFunc will be called now
+ GtkTargetEntry aEntry;
+ OString sTunnel = "application/x-libreoffice-internal-id-" + getPID();
+ aEntry.target = g_strdup(sTunnel.getStr());
+ aEntry.flags = 0;
+ aEntry.info = 0;
+ aGtkTargets.push_back(aEntry);
+
GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
- if(G_OBJECT(m_pOwner) == gtk_clipboard_get_owner(clipboard))
- gtk_clipboard_clear(clipboard);
- //use with_owner with m_pOwner so we can distinguish in handle_owner_change
- //if we have gained or lost ownership of the clipboard
- gtk_clipboard_set_with_owner(clipboard, aGtkTargets.data(), aGtkTargets.size(),
- ClipboardGetFunc, ClipboardClearFunc, G_OBJECT(m_pOwner));
+ gtk_clipboard_set_with_data(clipboard, aGtkTargets.data(), aGtkTargets.size(),
+ ClipboardGetFunc, ClipboardClearFunc, this);
gtk_clipboard_set_can_store(clipboard, aGtkTargets.data(), aGtkTargets.size());
}
--
2.7.4

@ -1,378 +0,0 @@
From 5c9d1063505335ea9734936c5549bc68acf7f5f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Fri, 1 Jul 2016 15:42:34 +0100
Subject: [PATCH] Resolves: rhbz#1351224 wayland grab related crashes
only one popup active at a time. Try and find the right path through the
uncanny valley which allows popups to appear, to get all mouse input that
happens to them, forward keyboard input to their parents, dismiss when the
mouse is clicked outside them and not crash if another popup wants to appear
to replace it
gtk3: XEmbed isn't going to happen
Change-Id: I7a7589a159a7fccdc224262bf5f91f8d98f5f619
(cherry picked from commit fe7b8bc9fdb57087ba9daa22cdec77d735eb71cd)
gtk3: if a popup is withdrawn close the popup
we don't always get the click that causes the popup
to be withdrawn when the mouse is clicked outside
the application during a grab
Change-Id: I2dbef23813972ebd75c8899711a2d1309110f968
(cherry picked from commit 1190e7385291fb0e6cd3505e88e589c80b02db00)
Change-Id: If4b39df41ca3dccde1e506d5328b06731a8c80eb
---
vcl/inc/unx/gtk/gtkframe.hxx | 9 ++-
vcl/unx/gtk3/gtk3gtkframe.cxx | 173 +++++++++++++++++++-----------------------
2 files changed, 85 insertions(+), 97 deletions(-)
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 4677923..a660567 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -269,6 +269,8 @@ class GtkSalFrame : public SalFrame
#endif
#else
static gboolean signalExpose( GtkWidget*, GdkEventExpose*, gpointer );
+ void askForXEmbedFocus( sal_Int32 nTimecode );
+ void grabKeyboard(bool bGrab);
#endif
static gboolean signalFocus( GtkWidget*, GdkEventFocus*, gpointer );
static gboolean signalMap( GtkWidget*, GdkEvent*, gpointer );
@@ -299,7 +301,6 @@ class GtkSalFrame : public SalFrame
static GdkNativeWindow findTopLevelSystemWindow( GdkNativeWindow aWindow );
static int m_nFloats;
- static std::vector<GtkWidget*> m_aGrabWidgetsBeforeShowFloat;
bool isFloatGrabWindow() const
{
@@ -335,7 +336,6 @@ class GtkSalFrame : public SalFrame
void setMinMaxSize();
void createNewWindow( ::Window aParent, bool bXEmbed, SalX11Screen nXScreen );
- void askForXEmbedFocus( sal_Int32 nTimecode );
void AllocateFrame();
void TriggerPaintEvent();
@@ -366,7 +366,6 @@ public:
// be swallowed
bool Dispatch( const XEvent* pEvent );
void grabPointer(bool bGrab, bool bOwnerEvents = false);
- void grabKeyboard(bool bGrab);
static GtkSalDisplay* getDisplay();
static GdkDisplay* getGdkDisplay();
@@ -424,6 +423,10 @@ public:
void startDrag(gint nButton, gint nDragOriginX, gint nDragOriginY,
GdkDragAction sourceActions, GtkTargetList* pTargetList);
+ void WithDrawn();
+
+ static void closePopup();
+
#endif
virtual ~GtkSalFrame();
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index 2320356..04af596 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -107,7 +107,6 @@
using namespace com::sun::star;
int GtkSalFrame::m_nFloats = 0;
-std::vector<GtkWidget*> GtkSalFrame::m_aGrabWidgetsBeforeShowFloat;
#if defined ENABLE_GMENU_INTEGRATION
static GDBusConnection* pSessionBus = nullptr;
@@ -1292,13 +1291,6 @@ void GtkSalFrame::Init( SystemParentData* pSysData )
//FIXME: Handling embedded windows, is going to be fun ...
}
-void GtkSalFrame::askForXEmbedFocus( sal_Int32 i_nTimeCode )
-{
- (void) this; // loplugin:staticmethods
- (void)i_nTimeCode;
- //FIXME: no askForXEmbedFocus for gtk3 yet
-}
-
void GtkSalFrame::SetExtendedFrameStyle( SalExtStyle nStyle )
{
if( nStyle != m_nExtStyle && ! isChild() )
@@ -1433,30 +1425,26 @@ void GtkSalFrame::Show( bool bVisible, bool bNoActivate )
if( ! bNoActivate && (m_nStyle & SalFrameStyleFlags::TOOLWINDOW) )
m_bSetFocusOnMap = true;
- gtk_widget_show( m_pWindow );
+ if (isFloatGrabWindow() && !getDisplay()->GetCaptureFrame() && m_nFloats == 0)
+ {
+ m_pParent->grabPointer(true, true);
+ gtk_grab_add(m_pParent->getMouseEventWidget());
+ }
+
+ gtk_widget_show(m_pWindow);
if( isFloatGrabWindow() )
{
m_nFloats++;
if( ! getDisplay()->GetCaptureFrame() && m_nFloats == 1 )
{
- GtkWindowGroup *pWindowGroup = gtk_window_get_group(GTK_WINDOW(m_pWindow));
- GtkWidget* pGrabWidgetBeforeShowFloat;
- while ((pGrabWidgetBeforeShowFloat = gtk_window_group_get_current_grab(pWindowGroup)))
- {
- m_aGrabWidgetsBeforeShowFloat.push_back(pGrabWidgetBeforeShowFloat);
- gtk_grab_remove(pGrabWidgetBeforeShowFloat);
- }
grabPointer(true, true);
- GtkSalFrame *pKeyboardFrame = m_pParent ? m_pParent : this;
- pKeyboardFrame->grabKeyboard(true);
+ gtk_grab_add(getMouseEventWidget());
}
// #i44068# reset parent's IM context
if( m_pParent )
m_pParent->EndExtTextInput(EndExtTextInputFlags::NONE);
}
- if( m_bWindowIsGtkPlug )
- askForXEmbedFocus( 0 );
}
else
{
@@ -1465,12 +1453,10 @@ void GtkSalFrame::Show( bool bVisible, bool bNoActivate )
m_nFloats--;
if( ! getDisplay()->GetCaptureFrame() && m_nFloats == 0)
{
- GtkSalFrame *pKeyboardFrame = m_pParent ? m_pParent : this;
- pKeyboardFrame->grabKeyboard(false);
+ gtk_grab_remove(getMouseEventWidget());
grabPointer(false);
- for (auto i = m_aGrabWidgetsBeforeShowFloat.rbegin(); i != m_aGrabWidgetsBeforeShowFloat.rend(); ++i)
- gtk_grab_add(*i);
- m_aGrabWidgetsBeforeShowFloat.clear();
+ gtk_grab_remove(m_pParent->getMouseEventWidget());
+ m_pParent->grabPointer(false);
}
}
gtk_widget_hide( m_pWindow );
@@ -2070,37 +2056,32 @@ void GtkSalFrame::grabPointer( bool bGrab, bool bOwnerEvents )
if (!m_pWindow)
return;
- const int nMask = (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
-
- GdkDeviceManager* pDeviceManager = gdk_display_get_device_manager(getGdkDisplay());
- GdkDevice* pPointer = gdk_device_manager_get_client_pointer(pDeviceManager);
+#if GTK_CHECK_VERSION(3, 19, 2)
+ GdkSeat* pSeat = gdk_display_get_default_seat(getGdkDisplay());
if (bGrab)
- gdk_device_grab(pPointer, widget_get_window(getMouseEventWidget()), GDK_OWNERSHIP_NONE, bOwnerEvents, (GdkEventMask) nMask, m_pCurrentCursor, gtk_get_current_event_time());
+ {
+ gdk_seat_grab(pSeat, widget_get_window(getMouseEventWidget()), GDK_SEAT_CAPABILITY_ALL_POINTING,
+ bOwnerEvents, NULL, NULL, NULL, NULL);
+ }
else
- gdk_device_ungrab(pPointer, gtk_get_current_event_time());
-}
-
-void GtkSalFrame::grabKeyboard( bool bGrab )
-{
- static const char* pEnv = getenv("SAL_NO_MOUSEGRABS"); // let's not introduce a special var for this
- if (pEnv && *pEnv)
- return;
-
- if (!m_pWindow)
- return;
+ {
+ gdk_seat_ungrab(pSeat);
+ }
+#else
+ const int nMask = (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK);
GdkDeviceManager* pDeviceManager = gdk_display_get_device_manager(getGdkDisplay());
GdkDevice* pPointer = gdk_device_manager_get_client_pointer(pDeviceManager);
- GdkDevice* pKeyboard = gdk_device_get_associated_device(pPointer);
if (bGrab)
{
- gdk_device_grab(pKeyboard, widget_get_window(m_pWindow), GDK_OWNERSHIP_NONE,
- true, (GdkEventMask)(GDK_KEY_PRESS | GDK_KEY_RELEASE), nullptr, gtk_get_current_event_time());
+ gdk_device_grab(pPointer, widget_get_window(getMouseEventWidget()), GDK_OWNERSHIP_NONE,
+ bOwnerEvents, (GdkEventMask) nMask, m_pCurrentCursor, gtk_get_current_event_time());
}
else
{
- gdk_device_ungrab(pKeyboard, gtk_get_current_event_time());
+ gdk_device_ungrab(pPointer, gtk_get_current_event_time());
}
+#endif
}
void GtkSalFrame::CaptureMouse( bool bCapture )
@@ -2562,6 +2543,22 @@ void GtkSalFrame::StartToolKitMoveBy()
pEvent->button.time);
}
+void GtkSalFrame::WithDrawn()
+{
+ if (isFloatGrabWindow())
+ closePopup();
+}
+
+void GtkSalFrame::closePopup()
+{
+ if (!m_nFloats)
+ return;
+ ImplSVData* pSVData = ImplGetSVData();
+ if (!pSVData->maWinData.mpFirstFloat)
+ return;
+ pSVData->maWinData.mpFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll);
+}
+
gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer frame )
{
UpdateLastInputEventTime(pEvent->time);
@@ -2593,69 +2590,40 @@ gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer
aEvent.mnY = (long)pEvent->y_root - pThis->maGeometry.nY;
aEvent.mnCode = GetMouseModCode( pEvent->state );
- bool bClosePopups = false;
- if( pEvent->type == GDK_BUTTON_PRESS &&
- !(pThis->m_nStyle & SalFrameStyleFlags::OWNERDRAWDECORATION)
- )
- {
- if( m_nFloats > 0 )
- {
- // close popups if user clicks outside our application
- gint x, y;
- bClosePopups = (gdk_display_get_window_at_pointer( GtkSalFrame::getGdkDisplay(), &x, &y ) == nullptr);
- }
- /* #i30306# release implicit pointer grab if no popups are open; else
- * Drag cannot grab the pointer and will fail.
- */
- if( m_nFloats < 1 || bClosePopups )
- gdk_display_pointer_ungrab( GtkSalFrame::getGdkDisplay(), GDK_CURRENT_TIME );
- }
+ vcl::DeletionListener aDel( pThis );
- if( pThis->m_bWindowIsGtkPlug &&
- pEvent->type == GDK_BUTTON_PRESS &&
- pEvent->button == 1 )
+ if (pEvent->type == GDK_BUTTON_PRESS && pThis->isFloatGrabWindow())
{
- pThis->askForXEmbedFocus( pEvent->time );
+ bool bClosePopups = (pEvent->window != widget_get_window(pThis->getMouseEventWidget()));
+ if (bClosePopups)
+ closePopup();
}
// --- RTL --- (mirror mouse pos)
if( AllSettings::GetLayoutRTL() )
aEvent.mnX = pThis->maGeometry.nWidth-1-aEvent.mnX;
- vcl::DeletionListener aDel( pThis );
-
- pThis->CallCallback( nEventType, &aEvent );
-
- if( ! aDel.isDeleted() )
+ if (!aDel.isDeleted())
{
- if( bClosePopups )
- {
- ImplSVData* pSVData = ImplGetSVData();
- if ( pSVData->maWinData.mpFirstFloat )
- {
- static const char* pEnv = getenv( "SAL_FLOATWIN_NOAPPFOCUSCLOSE" );
- if ( !(pSVData->maWinData.mpFirstFloat->GetPopupModeFlags() & FloatWinPopupFlags::NoAppFocusClose) && !(pEnv && *pEnv) )
- pSVData->maWinData.mpFirstFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
- }
- }
+ pThis->CallCallback( nEventType, &aEvent );
+ }
- if( ! aDel.isDeleted() )
+ if (!aDel.isDeleted())
+ {
+ int frame_x = (int)(pEvent->x_root - pEvent->x);
+ int frame_y = (int)(pEvent->y_root - pEvent->y);
+ if( frame_x != pThis->maGeometry.nX || frame_y != pThis->maGeometry.nY )
{
- int frame_x = (int)(pEvent->x_root - pEvent->x);
- int frame_y = (int)(pEvent->y_root - pEvent->y);
- if( frame_x != pThis->maGeometry.nX || frame_y != pThis->maGeometry.nY )
- {
- pThis->maGeometry.nX = frame_x;
- pThis->maGeometry.nY = frame_y;
- pThis->CallCallback( SalEvent::Move, nullptr );
- }
+ pThis->maGeometry.nX = frame_x;
+ pThis->maGeometry.nY = frame_y;
+ pThis->CallCallback( SalEvent::Move, nullptr );
}
}
return true;
}
-gboolean GtkSalFrame::signalScroll( GtkWidget*, GdkEventScroll* pEvent, gpointer frame )
+gboolean GtkSalFrame::signalScroll(GtkWidget*, GdkEventScroll* pEvent, gpointer frame)
{
UpdateLastInputEventTime(pEvent->time);
@@ -2757,6 +2725,13 @@ gboolean GtkSalFrame::signalMotion( GtkWidget*, GdkEventMotion* pEvent, gpointer
GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
+ //If a menu, e.g. font name dropdown, is open, then under wayland moving the
+ //mouse in the top left corner of the toplevel window in a
+ //0,0,float-width,float-height area generates motion events which are
+ //delivered to the dropdown
+ if (pThis->isFloatGrabWindow() && pEvent->window != widget_get_window(pThis->getMouseEventWidget()))
+ return true;
+
SalMouseEvent aEvent;
aEvent.mnTime = pEvent->time;
aEvent.mnX = (long)pEvent->x_root - pThis->maGeometry.nX;
@@ -2972,12 +2947,15 @@ gboolean GtkSalFrame::signalUnmap( GtkWidget*, GdkEvent*, gpointer frame )
return false;
}
-gboolean GtkSalFrame::signalKey( GtkWidget*, GdkEventKey* pEvent, gpointer frame )
+gboolean GtkSalFrame::signalKey(GtkWidget* pWidget, GdkEventKey* pEvent, gpointer frame)
{
UpdateLastInputEventTime(pEvent->time);
GtkSalFrame* pThis = static_cast<GtkSalFrame*>(frame);
+ if (pThis->isFloatGrabWindow())
+ return signalKey(pWidget, pEvent, pThis->m_pParent);
+
vcl::DeletionListener aDel( pThis );
if( pThis->m_pIMHandler )
@@ -3132,11 +3110,18 @@ gboolean GtkSalFrame::signalWindowState( GtkWidget*, GdkEvent* pEvent, gpointer
pThis->TriggerPaintEvent();
}
- if( (pEvent->window_state.new_window_state & GDK_WINDOW_STATE_MAXIMIZED) &&
- ! (pThis->m_nState & GDK_WINDOW_STATE_MAXIMIZED) )
+ if ((pEvent->window_state.new_window_state & GDK_WINDOW_STATE_MAXIMIZED) &&
+ !(pThis->m_nState & GDK_WINDOW_STATE_MAXIMIZED))
{
pThis->m_aRestorePosSize = GetPosAndSize(GTK_WINDOW(pThis->m_pWindow));
}
+
+ if ((pEvent->window_state.new_window_state & GDK_WINDOW_STATE_WITHDRAWN) &&
+ !(pThis->m_nState & GDK_WINDOW_STATE_WITHDRAWN))
+ {
+ pThis->WithDrawn();
+ }
+
pThis->m_nState = pEvent->window_state.new_window_state;
#if OSL_DEBUG_LEVEL > 1
--
2.7.4

@ -1,62 +0,0 @@
From 25477cb518a464fb052e55c2b7c250af606ba42d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Fri, 8 Jul 2016 14:50:56 +0100
Subject: [PATCH] Resolves: rhbz#1352965 gtk3 infinite clipboard recursion with
clipit installed
Change-Id: Ib67afaf532b8409e05fffbf1b8312d664460567d
---
vcl/unx/gtk3/gtk3gtkinst.cxx | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 8b01166..c92bf43 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -587,6 +587,7 @@ void VclGtkClipboard::setContents(
{
osl::ClearableMutexGuard aGuard( m_aMutex );
Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner );
+ bool bOwnerChange = (xOldOwner.is() && xOldOwner != xClipboardOwner);
Reference< datatransfer::XTransferable > xOldContents( m_aContents );
m_aContents = xTrans;
m_aOwner = xClipboardOwner;
@@ -594,6 +595,10 @@ void VclGtkClipboard::setContents(
std::list< Reference< datatransfer::clipboard::XClipboardListener > > aListeners( m_aListeners );
datatransfer::clipboard::ClipboardEvent aEv;
+ GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
+ if (bOwnerChange)
+ gtk_clipboard_clear(clipboard);
+ assert(m_aGtkTargets.empty());
if (m_aContents.is())
{
css::uno::Sequence<css::datatransfer::DataFlavor> aFormats = xTrans->getTransferDataFlavors();
@@ -607,15 +612,11 @@ void VclGtkClipboard::setContents(
aEntry.info = 0;
aGtkTargets.push_back(aEntry);
- GtkClipboard* clipboard = gtk_clipboard_get(m_nSelection);
gtk_clipboard_set_with_data(clipboard, aGtkTargets.data(), aGtkTargets.size(),
ClipboardGetFunc, ClipboardClearFunc, this);
gtk_clipboard_set_can_store(clipboard, aGtkTargets.data(), aGtkTargets.size());
}
- for (auto &a : m_aGtkTargets)
- g_free(a.target);
-
m_aGtkTargets = aGtkTargets;
}
@@ -623,7 +624,7 @@ void VclGtkClipboard::setContents(
aGuard.clear();
- if( xOldOwner.is() && xOldOwner != xClipboardOwner )
+ if (bOwnerChange)
xOldOwner->lostOwnership( this, xOldContents );
for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it =
aListeners.begin(); it != aListeners.end() ; ++it )
--
2.7.4

@ -1,160 +0,0 @@
From 08f105a770ac20641cd287f9e999dc70eaafa343 Mon Sep 17 00:00:00 2001
From: Jaskaran Singh <jvsg1303@gmail.com>
Date: Fri, 24 Jun 2016 19:53:11 +0530
Subject: [PATCH] Switch from orcus-0.11 to orcus-0.12
Change-Id: I837ed3a30fae6fbe6cb658f1feecce1e88279ae0
(cherry picked from commit 92be10ca0669fc05565507c4e62c674c5224e49f)
---
RepositoryExternal.mk | 4 ++--
configure.ac | 2 +-
download.lst | 4 ++--
.../liborcus/0001-workaround-a-linking-problem-on-windows.patch | 4 ++--
external/liborcus/ExternalPackage_liborcus.mk | 8 ++++----
external/liborcus/ExternalProject_liborcus.mk | 4 ++--
external/liborcus/Library_orcus-parser.mk | 3 +++
external/liborcus/Library_orcus.mk | 1 +
8 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 0fc7d25..6094333 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -3108,7 +3108,7 @@ $(call gb_LinkTarget_set_include,$(1),\
)
$(call gb_LinkTarget_add_libs,$(1),\
- -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.11 \
+ -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/liborcus/.libs -lorcus-0.12 \
)
$(if $(SYSTEM_BOOST), \
@@ -3127,7 +3127,7 @@ $(call gb_LinkTarget_set_include,$(1),\
)
$(call gb_LinkTarget_add_libs,$(1),\
- -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.11 \
+ -L$(call gb_UnpackedTarball_get_dir,liborcus)/src/parser/.libs -lorcus-parser-0.12 \
)
endef
diff --git a/configure.ac b/configure.ac
index d271db2..8421640 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9173,7 +9173,7 @@ if test -z "$enable_orcus" -o "$enable_orcus" != no; then
ENABLE_ORCUS="TRUE"
AC_DEFINE(ENABLE_ORCUS)
- libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.11 >= 0.11.2])
+ libo_CHECK_SYSTEM_MODULE([orcus],[ORCUS],[liborcus-0.12 >= 0.12.0])
if test "$with_system_orcus" != "yes"; then
if test "$SYSTEM_BOOST" = "TRUE"; then
# ===========================================================
diff --git a/download.lst b/download.lst
index 7632f99..19e4752 100644
--- a/download.lst
+++ b/download.lst
@@ -118,8 +118,8 @@ export OPENCOLLADA_TARBALL := OpenCOLLADA-master-6509aa13af.tar.bz2
export OPENLDAP_TARBALL := 804c6cb5698db30b75ad0ff1c25baefd-openldap-2.4.31.tgz
export OPENSSL_MD5SUM := 9392e65072ce4b614c1392eefc1f23d0
export OPENSSL_TARBALL := openssl-1.0.2h.tar.gz
-export ORCUS_MD5SUM := 205badaee72adf99422add8c4c49d669
-export ORCUS_TARBALL := liborcus-0.11.2.tar.gz
+export ORCUS_MD5SUM := b3b3efc8d6c92bb8016464e42cab3d06
+export ORCUS_TARBALL := b3b3efc8d6c92bb8016464e42cab3d06-liborcus-0.12.0.tar.gz
export OWNCLOUD_ANDROID_LIB_MD5SUM := 593f0aa47bf2efc0efda2d28fae063b2
export OWNCLOUD_ANDROID_LIB_TARBALL := owncloud-android-library-0.9.4-no-binary-deps.tar.gz
export PAGEMAKER_MD5SUM := 5c4985a68be0b79d3f809da5e12b143c
diff --git a/external/liborcus/0001-workaround-a-linking-problem-on-windows.patch b/external/liborcus/0001-workaround-a-linking-problem-on-windows.patch
index 5710877..308e51c 100644
--- a/external/liborcus/0001-workaround-a-linking-problem-on-windows.patch
+++ b/external/liborcus/0001-workaround-a-linking-problem-on-windows.patch
@@ -24,7 +24,7 @@ index b6e3f83..8027f25 100644
typedef const char* xmlns_id_t;
-ORCUS_PSR_DLLPUBLIC extern const xmlns_id_t XMLNS_UNKNOWN_ID;
-+const xmlns_id_t XMLNS_UNKNOWN_ID = NULL;
++const xmlns_id_t XMLNS_UNKNOWN_ID = nullptr;
ORCUS_PSR_DLLPUBLIC extern const xml_token_t XML_UNKNOWN_TOKEN;
ORCUS_PSR_DLLPUBLIC extern const size_t index_not_found;
ORCUS_PSR_DLLPUBLIC extern const size_t unspecified;
@@ -36,7 +36,7 @@ index be4e304..0a1b4a7 100644
namespace orcus {
--const xmlns_id_t XMLNS_UNKNOWN_ID = NULL;
+-const xmlns_id_t XMLNS_UNKNOWN_ID = nullptr;
const xml_token_t XML_UNKNOWN_TOKEN = 0;
const size_t index_not_found = std::numeric_limits<size_t>::max();
diff --git a/external/liborcus/ExternalPackage_liborcus.mk b/external/liborcus/ExternalPackage_liborcus.mk
index 56debe9..4a8b5f8 100644
--- a/external/liborcus/ExternalPackage_liborcus.mk
+++ b/external/liborcus/ExternalPackage_liborcus.mk
@@ -12,11 +12,11 @@ $(eval $(call gb_ExternalPackage_ExternalPackage,liborcus,liborcus))
$(eval $(call gb_ExternalPackage_use_external_project,liborcus,liborcus))
ifeq ($(OS),MACOSX)
-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.11.0.dylib,src/liborcus/.libs/liborcus-0.11.0.dylib))
-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.11.0.dylib,src/parser/.libs/liborcus-parser-0.11.0.dylib))
+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.12.0.dylib,src/liborcus/.libs/liborcus-0.12.0.dylib))
+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.12.0.dylib,src/parser/.libs/liborcus-parser-0.12.0.dylib))
else ifeq ($(DISABLE_DYNLOADING),)
-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.11.so.0,src/liborcus/.libs/liborcus-0.11.so.0.0.0))
-$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.11.so.0,src/parser/.libs/liborcus-parser-0.11.so.0.0.0))
+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-0.12.so.0,src/liborcus/.libs/liborcus-0.12.so.0.0.0))
+$(eval $(call gb_ExternalPackage_add_file,liborcus,$(LIBO_LIB_FOLDER)/liborcus-parser-0.12.so.0,src/parser/.libs/liborcus-parser-0.12.so.0.0.0))
endif
# vim: set noet sw=4 ts=4:
diff --git a/external/liborcus/ExternalProject_liborcus.mk b/external/liborcus/ExternalProject_liborcus.mk
index 580ef847..dce7d63 100644
--- a/external/liborcus/ExternalProject_liborcus.mk
+++ b/external/liborcus/ExternalProject_liborcus.mk
@@ -113,8 +113,8 @@ $(call gb_ExternalProject_get_state_target,liborcus,build) :
$(MAKE) \
$(if $(filter MACOSX,$(OS)),\
&& $(PERL) $(SRCDIR)/solenv/bin/macosx-change-install-names.pl shl OOO \
- $(gb_Package_SOURCEDIR_liborcus)/src/liborcus/.libs/liborcus-0.11.0.dylib \
- $(gb_Package_SOURCEDIR_liborcus)/src/parser/.libs/liborcus-parser-0.11.0.dylib \
+ $(gb_Package_SOURCEDIR_liborcus)/src/liborcus/.libs/liborcus-0.12.0.dylib \
+ $(gb_Package_SOURCEDIR_liborcus)/src/parser/.libs/liborcus-parser-0.12.0.dylib \
) \
)
diff --git a/external/liborcus/Library_orcus-parser.mk b/external/liborcus/Library_orcus-parser.mk
index 28af14e..4c2ca7f 100644
--- a/external/liborcus/Library_orcus-parser.mk
+++ b/external/liborcus/Library_orcus-parser.mk
@@ -39,12 +39,15 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus-parser,\
UnpackedTarball/liborcus/src/parser/css_types \
UnpackedTarball/liborcus/src/parser/csv_parser_base \
UnpackedTarball/liborcus/src/parser/exception \
+ UnpackedTarball/liborcus/src/parser/json_global \
UnpackedTarball/liborcus/src/parser/json_parser_base \
+ UnpackedTarball/liborcus/src/parser/json_parser_thread \
UnpackedTarball/liborcus/src/parser/parser_base \
UnpackedTarball/liborcus/src/parser/parser_global \
UnpackedTarball/liborcus/src/parser/pstring \
UnpackedTarball/liborcus/src/parser/sax_parser_base \
UnpackedTarball/liborcus/src/parser/sax_token_parser \
+ UnpackedTarball/liborcus/src/parser/sax_token_parser_thread \
UnpackedTarball/liborcus/src/parser/stream \
UnpackedTarball/liborcus/src/parser/string_pool \
UnpackedTarball/liborcus/src/parser/tokens \
diff --git a/external/liborcus/Library_orcus.mk b/external/liborcus/Library_orcus.mk
index e49adca..adc43cb 100644
--- a/external/liborcus/Library_orcus.mk
+++ b/external/liborcus/Library_orcus.mk
@@ -65,6 +65,7 @@ $(eval $(call gb_Library_add_generated_exception_objects,orcus,\
UnpackedTarball/liborcus/src/liborcus/measurement \
UnpackedTarball/liborcus/src/liborcus/odf_helper \
UnpackedTarball/liborcus/src/liborcus/odf_namespace_types \
+ UnpackedTarball/liborcus/src/liborcus/odf_number_formatting_context \
UnpackedTarball/liborcus/src/liborcus/odf_para_context \
UnpackedTarball/liborcus/src/liborcus/odf_styles_context \
UnpackedTarball/liborcus/src/liborcus/odf_styles \
--
2.9.3

@ -1,531 +0,0 @@
From 538096616926587d2d81c8d258d4a5b57862f644 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 30 Jun 2016 15:33:14 +0100
Subject: [PATCH] a11y crash on deleting certain frame in certain document
I've an internal RH document which crashes in a11y when a paragraph with a
graphic and a drawing frame in it is deleted.
The SdrObject is removed and deleted, but when
SwAccessibleContext::DisposeChild is called the object does not pass IsShowing
so its not removed from the accessibility map. Leaving an entry in the map
pointing to a deleted SdrObject
So here take the route-one approach of always removing from the map
accessibility children which depend on a SdrObject which is getting deleted,
whether or not it is inside the visible area at the moment.
The real change here is to SwAccessibleContext::DisposeChild and to
SwFrame::RemoveDrawObj
everything is called Dispose, hard to find anything
Change-Id: I473ed39c975886a6be30860cb61f6fe59c5508a4
(cherry picked from commit ad59dcf7dad19540403f5812677901e6fad30257)
Change-Id: I764cd54d6216d233756f52b5be66c80737b5e38d
Reviewed-on: https://gerrit.libreoffice.org/26824
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
(cherry picked from commit 04081b6907132c867041dd492408b5349f26cd42)
---
sw/inc/accmap.hxx | 9 +++++----
sw/source/core/access/acccell.cxx | 4 ++--
sw/source/core/access/acccell.hxx | 2 +-
sw/source/core/access/acccontext.cxx | 20 +++++++++++---------
sw/source/core/access/acccontext.hxx | 8 ++++----
sw/source/core/access/accdoc.cxx | 4 ++--
sw/source/core/access/accdoc.hxx | 2 +-
sw/source/core/access/accframebase.cxx | 4 ++--
sw/source/core/access/accframebase.hxx | 2 +-
sw/source/core/access/accmap.cxx | 13 +++++++------
sw/source/core/access/accnotextframe.cxx | 4 ++--
sw/source/core/access/accnotextframe.hxx | 2 +-
sw/source/core/access/acctable.cxx | 8 ++++----
sw/source/core/access/acctable.hxx | 4 ++--
sw/source/core/draw/dview.cxx | 8 ++++----
sw/source/core/inc/viewimp.hxx | 10 +++++-----
sw/source/core/layout/fly.cxx | 4 ++--
sw/source/core/view/viewimp.cxx | 9 +++++----
sw/source/uibase/docvw/PostItMgr.cxx | 2 +-
19 files changed, 62 insertions(+), 57 deletions(-)
diff --git a/sw/inc/accmap.hxx b/sw/inc/accmap.hxx
index 2178a72..25c9696 100644
--- a/sw/inc/accmap.hxx
+++ b/sw/inc/accmap.hxx
@@ -182,10 +182,11 @@ public:
void RemoveContext( const SdrObject *pObj );
// Dispose frame and its children if bRecursive is set
- void Dispose( const SwFrame* pFrame,
- const SdrObject* pObj,
- vcl::Window* pWindow,
- bool bRecursive = false );
+ void A11yDispose( const SwFrame* pFrame,
+ const SdrObject* pObj,
+ vcl::Window* pWindow,
+ bool bRecursive = false,
+ bool bCanSkipInvisible = true );
void InvalidatePosOrSize( const SwFrame* pFrame,
const SdrObject* pObj,
diff --git a/sw/source/core/access/acccell.cxx b/sw/source/core/access/acccell.cxx
index d448a7f..ca4ce14 100644
--- a/sw/source/core/access/acccell.cxx
+++ b/sw/source/core/access/acccell.cxx
@@ -263,13 +263,13 @@ uno::Sequence< OUString > SAL_CALL SwAccessibleCell::getSupportedServiceNames()
return aRet;
}
-void SwAccessibleCell::Dispose( bool bRecursive )
+void SwAccessibleCell::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
const SwFrame *pParent = GetParent( SwAccessibleChild(GetFrame()), IsInPagePreview() );
::rtl::Reference< SwAccessibleContext > xAccImpl(
GetMap()->GetContextImpl( pParent, false ) );
if( xAccImpl.is() )
- xAccImpl->DisposeChild( SwAccessibleChild(GetFrame()), bRecursive );
+ xAccImpl->DisposeChild(SwAccessibleChild(GetFrame()), bRecursive, bCanSkipInvisible);
SwAccessibleContext::Dispose( bRecursive );
}
diff --git a/sw/source/core/access/acccell.hxx b/sw/source/core/access/acccell.hxx
index 594dc73..9d543c6 100644
--- a/sw/source/core/access/acccell.hxx
+++ b/sw/source/core/access/acccell.hxx
@@ -83,7 +83,7 @@ public:
getSupportedServiceNames()
throw (css::uno::RuntimeException, std::exception) override;
- virtual void Dispose( bool bRecursive = false ) override;
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
virtual void InvalidatePosOrSize( const SwRect& rFrame ) override;
diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx
index b74ed70..8fb2e30 100644
--- a/sw/source/core/access/acccontext.cxx
+++ b/sw/source/core/access/acccontext.cxx
@@ -393,8 +393,9 @@ void SwAccessibleContext::InvalidateChildrenStates( const SwFrame* _pFrame,
}
}
-void SwAccessibleContext::DisposeChildren( const SwFrame *pFrame,
- bool bRecursive )
+void SwAccessibleContext::DisposeChildren(const SwFrame *pFrame,
+ bool bRecursive,
+ bool bCanSkipInvisible)
{
const SwAccessibleChildSList aVisList( GetVisArea(), *pFrame, *(GetMap()) );
SwAccessibleChildSList::const_iterator aIter( aVisList.begin() );
@@ -410,7 +411,7 @@ void SwAccessibleContext::DisposeChildren( const SwFrame *pFrame,
if( xAccImpl.is() )
xAccImpl->Dispose( bRecursive );
else if( bRecursive )
- DisposeChildren( pLower, bRecursive );
+ DisposeChildren(pLower, bRecursive, bCanSkipInvisible);
}
else if ( rLower.GetDrawObject() )
{
@@ -422,7 +423,7 @@ void SwAccessibleContext::DisposeChildren( const SwFrame *pFrame,
}
else if ( rLower.GetWindow() )
{
- DisposeChild( rLower, false );
+ DisposeChild(rLower, false, bCanSkipInvisible);
}
++aIter;
}
@@ -1032,7 +1033,7 @@ void SwAccessibleContext::ScrolledInShape( const SdrObject* ,
}
}
-void SwAccessibleContext::Dispose( bool bRecursive )
+void SwAccessibleContext::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
SolarMutexGuard aGuard;
@@ -1044,7 +1045,7 @@ void SwAccessibleContext::Dispose( bool bRecursive )
// dispose children
if( bRecursive )
- DisposeChildren( GetFrame(), bRecursive );
+ DisposeChildren(GetFrame(), bRecursive, bCanSkipInvisible);
// get parent
uno::Reference< XAccessible > xParent( GetWeakParent() );
@@ -1083,12 +1084,13 @@ void SwAccessibleContext::Dispose( bool bRecursive )
}
void SwAccessibleContext::DisposeChild( const SwAccessibleChild& rChildFrameOrObj,
- bool bRecursive )
+ bool bRecursive, bool bCanSkipInvisible )
{
SolarMutexGuard aGuard;
- if ( IsShowing( *(GetMap()), rChildFrameOrObj ) ||
+ if ( !bCanSkipInvisible ||
rChildFrameOrObj.AlwaysIncludeAsChild() ||
+ IsShowing( *(GetMap()), rChildFrameOrObj ) ||
!SwAccessibleChild( GetFrame() ).IsVisibleChildrenOnly() )
{
// If the object could have existed before, than there is nothing to do,
@@ -1119,7 +1121,7 @@ void SwAccessibleContext::DisposeChild( const SwAccessibleChild& rChildFrameOrOb
}
}
else if( bRecursive && rChildFrameOrObj.GetSwFrame() )
- DisposeChildren( rChildFrameOrObj.GetSwFrame(), bRecursive );
+ DisposeChildren(rChildFrameOrObj.GetSwFrame(), bRecursive, bCanSkipInvisible);
}
void SwAccessibleContext::InvalidatePosOrSize( const SwRect& )
diff --git a/sw/source/core/access/acccontext.hxx b/sw/source/core/access/acccontext.hxx
index 3adcbbd..6c6ae83 100644
--- a/sw/source/core/access/acccontext.hxx
+++ b/sw/source/core/access/acccontext.hxx
@@ -147,8 +147,8 @@ protected:
// Dispose children of the specified SwFrame. The SwFrame might belong to
// the current object or to any other child or grandchild.
- void DisposeChildren( const SwFrame *pFrame,
- bool bRecursive );
+ void DisposeChildren(const SwFrame *pFrame,
+ bool bRecursive, bool bCanSkipInvisible);
void DisposeShape( const SdrObject *pObj,
::accessibility::AccessibleShape *pAccImpl );
@@ -315,10 +315,10 @@ public:
// thread safe C++ interface
// The object is not visible an longer and should be destroyed
- virtual void Dispose( bool bRecursive = false );
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true);
// The child object is not visible an longer and should be destroyed
- virtual void DisposeChild( const sw::access::SwAccessibleChild& rFrameOrObj, bool bRecursive );
+ virtual void DisposeChild(const sw::access::SwAccessibleChild& rFrameOrObj, bool bRecursive, bool bCanSkipInvisible);
// The object has been moved by the layout
virtual void InvalidatePosOrSize( const SwRect& rFrame );
diff --git a/sw/source/core/access/accdoc.cxx b/sw/source/core/access/accdoc.cxx
index bed5158..d01c612 100644
--- a/sw/source/core/access/accdoc.cxx
+++ b/sw/source/core/access/accdoc.cxx
@@ -380,14 +380,14 @@ SwAccessibleDocument::~SwAccessibleDocument()
pWin->RemoveChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
}
-void SwAccessibleDocument::Dispose( bool bRecursive )
+void SwAccessibleDocument::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
OSL_ENSURE( GetFrame() && GetMap(), "already disposed" );
vcl::Window *pWin = GetMap() ? GetMap()->GetShell()->GetWin() : nullptr;
if( pWin )
pWin->RemoveChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
- SwAccessibleContext::Dispose( bRecursive );
+ SwAccessibleContext::Dispose(bRecursive, bCanSkipInvisible);
}
IMPL_LINK_TYPED( SwAccessibleDocument, WindowChildEventListener, VclWindowEvent&, rEvent, void )
diff --git a/sw/source/core/access/accdoc.hxx b/sw/source/core/access/accdoc.hxx
index 5fdb656..e11f068 100644
--- a/sw/source/core/access/accdoc.hxx
+++ b/sw/source/core/access/accdoc.hxx
@@ -198,7 +198,7 @@ public:
// thread safe C++ interface
// The object is not visible an longer and should be destroyed
- virtual void Dispose( bool bRecursive = false ) override;
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
// XAccessibleComponent
sal_Int32 SAL_CALL getBackground()
diff --git a/sw/source/core/access/accframebase.cxx b/sw/source/core/access/accframebase.cxx
index 9cf0253..1382315 100644
--- a/sw/source/core/access/accframebase.cxx
+++ b/sw/source/core/access/accframebase.cxx
@@ -263,14 +263,14 @@ void SwAccessibleFrameBase::Modify( const SfxPoolItem* pOld, const SfxPoolItem *
}
}
-void SwAccessibleFrameBase::Dispose( bool bRecursive )
+void SwAccessibleFrameBase::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
SolarMutexGuard aGuard;
if( GetRegisteredIn() )
GetRegisteredInNonConst()->Remove( this );
- SwAccessibleContext::Dispose( bRecursive );
+ SwAccessibleContext::Dispose(bRecursive, bCanSkipInvisible);
}
//Get the selection cursor of the document.
diff --git a/sw/source/core/access/accframebase.hxx b/sw/source/core/access/accframebase.hxx
index 7d1ac0c..6df342a 100644
--- a/sw/source/core/access/accframebase.hxx
+++ b/sw/source/core/access/accframebase.hxx
@@ -57,7 +57,7 @@ public:
static sal_uInt8 GetNodeType( const SwFlyFrame *pFlyFrame );
// The object is not visible an longer and should be destroyed
- virtual void Dispose( bool bRecursive = false ) override;
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
virtual bool SetSelectedState( bool bSeleted ) override;
};
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index 4c2aaae..2a6a3c3 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -2241,10 +2241,11 @@ void SwAccessibleMap::RemoveContext( const SdrObject *pObj )
}
}
-void SwAccessibleMap::Dispose( const SwFrame *pFrame,
- const SdrObject *pObj,
- vcl::Window* pWindow,
- bool bRecursive )
+void SwAccessibleMap::A11yDispose( const SwFrame *pFrame,
+ const SdrObject *pObj,
+ vcl::Window* pWindow,
+ bool bRecursive,
+ bool bCanSkipInvisible )
{
SwAccessibleChild aFrameOrObj( pFrame, pObj, pWindow );
@@ -2355,7 +2356,7 @@ void SwAccessibleMap::Dispose( const SwFrame *pFrame,
// be broadcasted at the end of the action to give the table
// a chance to generate a single table change event.
- xParentAccImpl->DisposeChild( aFrameOrObj, bRecursive );
+ xParentAccImpl->DisposeChild( aFrameOrObj, bRecursive, bCanSkipInvisible );
}
else if( xShapeAccImpl.is() )
{
@@ -3189,7 +3190,7 @@ bool SwAccessibleMap::ReplaceChild (
// Also get keep parent.
uno::Reference < XAccessible > xParent( pCurrentChild->getAccessibleParent() );
pCurrentChild = nullptr; // will be released by dispose
- Dispose( nullptr, pObj, nullptr );
+ A11yDispose( nullptr, pObj, nullptr );
{
osl::MutexGuard aGuard( maMutex );
diff --git a/sw/source/core/access/accnotextframe.cxx b/sw/source/core/access/accnotextframe.cxx
index 3af6558..5a007f0 100644
--- a/sw/source/core/access/accnotextframe.cxx
+++ b/sw/source/core/access/accnotextframe.cxx
@@ -164,14 +164,14 @@ void SwAccessibleNoTextFrame::Modify( const SfxPoolItem* pOld, const SfxPoolItem
}
}
-void SwAccessibleNoTextFrame::Dispose( bool bRecursive )
+void SwAccessibleNoTextFrame::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
SolarMutexGuard aGuard;
if( aDepend.GetRegisteredIn() )
aDepend.GetRegisteredIn()->Remove( &aDepend );
- SwAccessibleFrameBase::Dispose( bRecursive );
+ SwAccessibleFrameBase::Dispose(bRecursive, bCanSkipInvisible);
}
// #i73249#
diff --git a/sw/source/core/access/accnotextframe.hxx b/sw/source/core/access/accnotextframe.hxx
index d11dd25..6be3005 100644
--- a/sw/source/core/access/accnotextframe.hxx
+++ b/sw/source/core/access/accnotextframe.hxx
@@ -98,7 +98,7 @@ public:
throw ( css::uno::RuntimeException, std::exception ) override;
// The object is not visible an longer and should be destroyed
- virtual void Dispose( bool bRecursive = false ) override;
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
virtual sal_Int32 SAL_CALL getCaretPosition( ) throw (css::uno::RuntimeException, std::exception) override;
virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) throw (css::lang::IndexOutOfBoundsException, css::uno::RuntimeException, std::exception) override;
diff --git a/sw/source/core/access/acctable.cxx b/sw/source/core/access/acctable.cxx
index 0831419..8706683 100644
--- a/sw/source/core/access/acctable.cxx
+++ b/sw/source/core/access/acctable.cxx
@@ -1391,18 +1391,18 @@ void SwAccessibleTable::InvalidatePosOrSize( const SwRect& rOldBox )
SwAccessibleContext::InvalidatePosOrSize( rOldBox );
}
-void SwAccessibleTable::Dispose( bool bRecursive )
+void SwAccessibleTable::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
SolarMutexGuard aGuard;
if( GetRegisteredIn() )
GetRegisteredInNonConst()->Remove( this );
- SwAccessibleContext::Dispose( bRecursive );
+ SwAccessibleContext::Dispose(bRecursive, bCanSkipInvisible);
}
void SwAccessibleTable::DisposeChild( const SwAccessibleChild& rChildFrameOrObj,
- bool bRecursive )
+ bool bRecursive, bool bCanSkipInvisible )
{
SolarMutexGuard aGuard;
@@ -1421,7 +1421,7 @@ void SwAccessibleTable::DisposeChild( const SwAccessibleChild& rChildFrameOrObj,
// about its change. We then must not call the superclass
uno::Reference< XAccessible > xAcc( GetMap()->GetContext( pFrame, false ) );
if( !xAcc.is() )
- SwAccessibleContext::DisposeChild( rChildFrameOrObj, bRecursive );
+ SwAccessibleContext::DisposeChild( rChildFrameOrObj, bRecursive, bCanSkipInvisible );
}
void SwAccessibleTable::InvalidateChildPosOrSize( const SwAccessibleChild& rChildFrameOrObj,
diff --git a/sw/source/core/access/acctable.hxx b/sw/source/core/access/acctable.hxx
index 8afd565..9f3c385 100644
--- a/sw/source/core/access/acctable.hxx
+++ b/sw/source/core/access/acctable.hxx
@@ -224,10 +224,10 @@ public:
virtual void InvalidatePosOrSize( const SwRect& rOldBox ) override;
// The object is not visible an longer and should be destroyed
- virtual void Dispose( bool bRecursive = false ) override;
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
virtual void DisposeChild( const sw::access::SwAccessibleChild& rFrameOrObj,
- bool bRecursive ) override;
+ bool bRecursive, bool bCanSkipInvisible ) override;
virtual void InvalidateChildPosOrSize( const sw::access::SwAccessibleChild& rFrameOrObj,
const SwRect& rFrame ) override;
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx
index 495485c..5105092 100644
--- a/sw/source/core/draw/dview.cxx
+++ b/sw/source/core/draw/dview.cxx
@@ -375,7 +375,7 @@ void SwDrawView::MoveRepeatedObjs( const SwAnchoredObject& _rMovedAnchoredObj,
}
else
{
- rImp.DisposeAccessibleObj( pAnchoredObj->GetDrawObj() );
+ rImp.DisposeAccessibleObj(pAnchoredObj->GetDrawObj(), true);
rImp.AddAccessibleObj( pAnchoredObj->GetDrawObj() );
}
}
@@ -411,7 +411,7 @@ void SwDrawView::MoveRepeatedObjs( const SwAnchoredObject& _rMovedAnchoredObj,
}
else
{
- rImp.DisposeAccessibleObj( pAnchoredObj->GetDrawObj() );
+ rImp.DisposeAccessibleObj(pAnchoredObj->GetDrawObj(), true);
rImp.AddAccessibleObj( pAnchoredObj->GetDrawObj() );
}
}
@@ -621,7 +621,7 @@ void SwDrawView::ObjOrderChanged( SdrObject* pObj, sal_uLong nOldPos,
}
else
{
- rImp.DisposeAccessibleObj( pTmpObj );
+ rImp.DisposeAccessibleObj(pTmpObj, true);
rImp.AddAccessibleObj( pTmpObj );
}
}
@@ -640,7 +640,7 @@ void SwDrawView::ObjOrderChanged( SdrObject* pObj, sal_uLong nOldPos,
else
{
// adjustments for accessibility API
- rImp.DisposeAccessibleObj( pObj );
+ rImp.DisposeAccessibleObj(pObj, true);
rImp.AddAccessibleObj( pObj );
}
diff --git a/sw/source/core/inc/viewimp.hxx b/sw/source/core/inc/viewimp.hxx
index 4ebe489..be88ca9 100644
--- a/sw/source/core/inc/viewimp.hxx
+++ b/sw/source/core/inc/viewimp.hxx
@@ -225,10 +225,10 @@ public:
/// Remove a frame from the accessible view
void DisposeAccessible( const SwFrame *pFrame, const SdrObject *pObj,
- bool bRecursive );
+ bool bRecursive, bool bCanSkipInvisible );
inline void DisposeAccessibleFrame( const SwFrame *pFrame,
bool bRecursive = false );
- inline void DisposeAccessibleObj( const SdrObject *pObj );
+ inline void DisposeAccessibleObj( const SdrObject *pObj, bool bCanSkipInvisible );
/// Move a frame's position in the accessible view
void MoveAccessible( const SwFrame *pFrame, const SdrObject *pObj,
@@ -278,12 +278,12 @@ inline SwAccessibleMap& SwViewShellImp::GetAccessibleMap()
inline void SwViewShellImp::DisposeAccessibleFrame( const SwFrame *pFrame,
bool bRecursive )
{
- DisposeAccessible( pFrame, nullptr, bRecursive );
+ DisposeAccessible( pFrame, nullptr, bRecursive, true );
}
-inline void SwViewShellImp::DisposeAccessibleObj( const SdrObject *pObj )
+inline void SwViewShellImp::DisposeAccessibleObj( const SdrObject *pObj, bool bCanSkipInvisible )
{
- DisposeAccessible( nullptr, pObj, false );
+ DisposeAccessible( nullptr, pObj, false, bCanSkipInvisible );
}
inline void SwViewShellImp::MoveAccessibleFrame( const SwFrame *pFrame,
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index 66c131d..5ad9f40 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -2160,8 +2160,8 @@ void SwFrame::RemoveDrawObj( SwAnchoredObject& _rToRemoveObj )
if( pSh )
{
SwRootFrame* pLayout = getRootFrame();
- if( pLayout && pLayout->IsAnyShellAccessible() )
- pSh->Imp()->DisposeAccessibleObj( _rToRemoveObj.GetDrawObj() );
+ if (pLayout && pLayout->IsAnyShellAccessible())
+ pSh->Imp()->DisposeAccessibleObj(_rToRemoveObj.GetDrawObj(), false);
}
// deregister from page frame
diff --git a/sw/source/core/view/viewimp.cxx b/sw/source/core/view/viewimp.cxx
index 254a5b7..e403be9 100644
--- a/sw/source/core/view/viewimp.cxx
+++ b/sw/source/core/view/viewimp.cxx
@@ -300,15 +300,16 @@ void SwViewShellImp::UpdateAccessible()
GetAccessibleMap().GetDocumentView();
}
-void SwViewShellImp::DisposeAccessible( const SwFrame *pFrame,
- const SdrObject *pObj,
- bool bRecursive )
+void SwViewShellImp::DisposeAccessible(const SwFrame *pFrame,
+ const SdrObject *pObj,
+ bool bRecursive,
+ bool bCanSkipInvisible)
{
OSL_ENSURE( !pFrame || pFrame->IsAccessibleFrame(), "frame is not accessible" );
for(SwViewShell& rTmp : GetShell()->GetRingContainer())
{
if( rTmp.Imp()->IsAccessible() )
- rTmp.Imp()->GetAccessibleMap().Dispose( pFrame, pObj, nullptr, bRecursive );
+ rTmp.Imp()->GetAccessibleMap().A11yDispose( pFrame, pObj, nullptr, bRecursive, bCanSkipInvisible );
}
}
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index 1ef3524..f6f4361 100644
--- a/sw/source/uibase/docvw/PostItMgr.cxx
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
@@ -2194,7 +2194,7 @@ void SwPostItMgr::DisconnectSidebarWinFromFrame( const SwFrame& rFrame,
if ( bRemoved &&
mpWrtShell->GetAccessibleMap() )
{
- mpWrtShell->GetAccessibleMap()->Dispose( nullptr, nullptr, &rSidebarWin );
+ mpWrtShell->GetAccessibleMap()->A11yDispose( nullptr, nullptr, &rSidebarWin );
}
}
}
--
2.7.4

@ -1,45 +0,0 @@
From 5f58670b43e5284d9460b561e774175c7a2dd7ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Tue, 13 Sep 2016 10:42:16 +0100
Subject: [PATCH] add xdg-email as the default email route
because xdg-email is apparently the only route
that knows how to support adding an attachment
to thunderbird
Change-Id: Ife1b56ccfe2434eb31ad67bef00f55197e96151e
---
shell/source/unix/misc/senddoc.sh | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/shell/source/unix/misc/senddoc.sh b/shell/source/unix/misc/senddoc.sh
index 169af25..4519e01 100755
--- a/shell/source/unix/misc/senddoc.sh
+++ b/shell/source/unix/misc/senddoc.sh
@@ -384,7 +384,9 @@ case `basename "$MAILER" | sed 's/-.*$//'` in
# Try to be smart, and send the mail anyway, if we have the
# possibility to do so.
- if [ -n "$DESKTOP_LAUNCH" ]; then
+ if [ -x /usr/bin/xdg-email ] ; then
+ MAILER=/usr/bin/xdg-email
+ elif [ -n "$DESKTOP_LAUNCH" ]; then
# http://lists.freedesktop.org/pipermail/xdg/2004-August/002873.html
MAILER=${DESKTOP_LAUNCH}
elif [ -n "$KDE_FULL_SESSION" -a -x /usr/bin/kde-open ] ; then
@@ -423,7 +425,11 @@ case `basename "$MAILER" | sed 's/-.*$//'` in
shift
;;
--attach)
- MAILTO="${MAILTO:-}${MAILTO:+&}attachment="`echo "file://$2" | "${URI_ENCODE}"`
+ if [ "$MAILER" = "/usr/bin/xdg-email" ]; then
+ MAILTO="${MAILTO:-}${MAILTO:+&}attach="`echo "file://$2" | "${URI_ENCODE}"`
+ else
+ MAILTO="${MAILTO:-}${MAILTO:+&}attachment="`echo "file://$2" | "${URI_ENCODE}"`
+ fi
shift
;;
*)
--
2.7.4

@ -1,112 +0,0 @@
From f276ca939deb3ee19d171b8541cd18baa4eec3d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Fri, 1 Jul 2016 14:38:54 +0100
Subject: [PATCH] don't autocapitalize words that follow a field mark
Change-Id: Ia8efa88aaf47edba9a590c858d0ea30d7bfe2977
---
editeng/qa/unit/core-test.cxx | 22 ++++++++++++++++++++++
editeng/source/misc/svxacorr.cxx | 18 ++++++++++++------
2 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx
index d303805..14f06fe 100644
--- a/editeng/qa/unit/core-test.cxx
+++ b/editeng/qa/unit/core-test.cxx
@@ -340,6 +340,28 @@ void Test::testAutocorrect()
CPPUNIT_ASSERT_EQUAL(sExpected, aFoo.getResult());
}
+
+ {
+ OUString sInput("Test. test");
+ sal_Unicode cNextChar(' ');
+ OUString sExpected("Test. Test ");
+
+ TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US);
+ aAutoCorrect.DoAutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true);
+
+ CPPUNIT_ASSERT_MESSAGE("autocorrect", aFoo.getResult() == sExpected);
+ }
+
+ {
+ OUString sInput("Test. \x01 test");
+ sal_Unicode cNextChar(' ');
+ OUString sExpected("Test. \x01 test ");
+
+ TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US);
+ aAutoCorrect.DoAutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true);
+
+ CPPUNIT_ASSERT_MESSAGE("autocorrect", aFoo.getResult() == sExpected);
+ }
}
namespace {
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index d736d94..11e56ef 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -102,6 +102,12 @@ static inline bool IsWordDelim( const sal_Unicode c )
cNonBreakingSpace == c || 0x2011 == c || 0x1 == c;
}
+static inline bool IsAutoCapitalizeWordDelim( const sal_Unicode c )
+{
+ return ' ' == c || '\t' == c || 0x0a == c ||
+ cNonBreakingSpace == c || 0x2011 == c;
+}
+
static inline bool IsLowerLetter( sal_Int32 nCharType )
{
return CharClass::isLetterType( nCharType ) &&
@@ -855,9 +861,9 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc,
if( !bAtStart ) // Still no beginning of a paragraph?
{
- if ( IsWordDelim( *pStr ) )
+ if (IsAutoCapitalizeWordDelim(*pStr))
{
- while( ! ( bAtStart = (pStart == pStr--) ) && IsWordDelim( *pStr ) )
+ while (!(bAtStart = (pStart == pStr--)) && IsAutoCapitalizeWordDelim(*pStr))
;
}
// Asian full stop, full width full stop, full width exclamation mark
@@ -888,7 +894,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc,
do { // overwrite all blanks
--pStr;
- if( !IsWordDelim( *pStr ))
+ if (!IsAutoCapitalizeWordDelim(*pStr))
break;
} while( ! ( bAtStart = (pStart == pStr) ) );
@@ -983,7 +989,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc,
else
bAlphaFnd = true;
}
- else if( bAlphaFnd || IsWordDelim( *pTmpStr ) )
+ else if (bAlphaFnd || IsAutoCapitalizeWordDelim(*pTmpStr))
break;
if( pTmpStr == pStart )
@@ -999,7 +1005,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc,
bool bNumericOnly = '0' <= *(pStr+1) && *(pStr+1) <= '9';
// Search for the beginning of the word
- while( !IsWordDelim( *pStr ))
+ while (!IsAutoCapitalizeWordDelim(*pStr))
{
if( bNumericOnly && rCC.isLetter( aText, pStr - pStart ) )
bNumericOnly = false;
@@ -1013,7 +1019,7 @@ bool SvxAutoCorrect::FnCapitalStartSentence( SvxAutoCorrDoc& rDoc,
if( bNumericOnly ) // consists of only numbers, then not
return false;
- if( IsWordDelim( *pStr ))
+ if (IsAutoCapitalizeWordDelim(*pStr))
++pStr;
OUString sWord;
--
2.7.4

@ -1,82 +0,0 @@
From 17f749afd75c407bf7adae9b8e15276de14ef5d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 29 Sep 2016 10:09:02 +0100
Subject: [PATCH] only date autofilter menus need the space for the tree
expanders
so for lists that don't include dates then drop the tree view bits
to save space to the left of the entries
Change-Id: I44f624d8a06d578674806813239a408466c87d70
---
sc/source/ui/cctrl/checklistmenu.cxx | 14 ++++++++++----
sc/source/ui/inc/checklistmenu.hxx | 1 +
sc/source/ui/view/gridwin.cxx | 1 +
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx
index a017cda..0b5174e 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -877,7 +877,7 @@ void ScCheckListMenuWindow::CancelButton::Click()
ScCheckListMenuWindow::ScCheckListMenuWindow(vcl::Window* pParent, ScDocument* pDoc) :
ScMenuFloatingWindow(pParent, pDoc),
maEdSearch(VclPtr<ScSearchEdit>::Create(this)),
- maChecks(VclPtr<ScCheckListBox>::Create(this, WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT) ),
+ maChecks(VclPtr<ScCheckListBox>::Create(this)),
maChkToggleAll(VclPtr<TriStateBox>::Create(this, 0)),
maBtnSelectSingle(VclPtr<ImageButton>::Create(this, 0)),
maBtnUnselectSingle(VclPtr<ImageButton>::Create(this, 0)),
@@ -905,9 +905,6 @@ ScCheckListMenuWindow::ScCheckListMenuWindow(vcl::Window* pParent, ScDocument* p
maEdSearch->SetTabStopsContainer( &maTabStops );
maChecks->SetTabStopsContainer( &maTabStops );
-
- // Enable type-ahead search in the check list box.
- maChecks->SetStyle(maChecks->GetStyle() | WB_QUICK_SEARCH);
}
ScCheckListMenuWindow::~ScCheckListMenuWindow()
@@ -1831,6 +1828,15 @@ void ScSearchEdit::MouseButtonDown(const MouseEvent& rMEvt)
mpTabStops->SetTabStop( this );
}
+void ScCheckListMenuWindow::setHasDates(bool bHasDates)
+{
+ // WB_QUICK_SEARCH Enables type-ahead search in the check list box.
+ if (bHasDates)
+ maChecks->SetStyle(WB_QUICK_SEARCH | WB_HASBUTTONS | WB_HASLINES | WB_HASLINESATROOT | WB_HASBUTTONSATROOT);
+ else
+ maChecks->SetStyle(WB_QUICK_SEARCH | WB_HASBUTTONS);
+}
+
void ScCheckListMenuWindow::initMembers()
{
size_t n = maMembers.size();
diff --git a/sc/source/ui/inc/checklistmenu.hxx b/sc/source/ui/inc/checklistmenu.hxx
index 6994bc1..856a607 100644
--- a/sc/source/ui/inc/checklistmenu.hxx
+++ b/sc/source/ui/inc/checklistmenu.hxx
@@ -325,6 +325,7 @@ public:
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
void setMemberSize(size_t n);
+ void setHasDates(bool bHasDates);
void addDateMember(const OUString& rName, double nVal, bool bVisible);
void addMember(const OUString& rName, bool bVisible);
void initMembers();
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 6e4338c..34a4914 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -714,6 +714,7 @@ void ScGridWindow::LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow)
std::vector<ScTypedStrData> aStrings;
pDoc->GetFilterEntries(nCol, nRow, nTab, aStrings, bHasDates);
+ mpAutoFilterPopup->setHasDates(bHasDates);
mpAutoFilterPopup->setMemberSize(aStrings.size());
std::vector<ScTypedStrData>::const_iterator it = aStrings.begin(), itEnd = aStrings.end();
for (; it != itEnd; ++it)
--
2.7.4

@ -1,9 +1,9 @@
# download path contains version without the last (fourth) digit
%define libo_version 5.2.3
%define libo_version 5.3.0
# Should contain .alphaX / .betaX, if this is pre-release (actually
# pre-RC) version. The pre-release string is part of tarball file names,
# so we need a way to define it easily at one place.
%define libo_prerelease %{nil}
%define libo_prerelease .alpha1
# Should contain any suffix of release tarball name, e.g., -buildfix1.
%define libo_buildfix %{nil}
# rhbz#715152 state vendor
@ -54,8 +54,8 @@
Summary: Free Software Productivity Suite
Name: libreoffice
Epoch: 1
Version: %{libo_version}.1
Release: 2%{?libo_prerelease}%{?dist}
Version: %{libo_version}.0
Release: 1%{?libo_prerelease}%{?dist}
License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0 and CC0
URL: http://www.libreoffice.org/
@ -65,7 +65,7 @@ Source2: %{source_url}/libreoffice-translations-%{version}%{?libo_prerele
Source3: http://dev-www.libreoffice.org/extern/185d60944ea767075d27247c3162b3bc-unowinreg.dll
Source4: libreoffice-multiliblauncher.sh
Source5: %{external_url}/a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip
Source6: %{external_url}/ce12af00283eb90d9281956524250d6e-xmlsec1-1.2.20.tar.gz
Source6: %{external_url}/0fb1bb06d60d7708abc4797008209bcc-xmlsec1-1.2.22.tar.gz
Source7: %{external_url}/798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip
Source8: %{external_url}/35c94d2df8893241173de1d16b6034c0-swingExSrc.zip
#Unfortunately later versions of hsqldb changed the file format, so if we use a later version we loose
@ -88,12 +88,14 @@ Source48: https://raw.githubusercontent.com/gnome-design-team/gnome-icons/
%if 0%{?rhel}
Source100: %{external_url}/0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz
Source101: %{external_url}/liborcus-0.11.2.tar.gz
Source101: %{external_url}/liborcus-0.12.1.tar.gz
Source102: %{external_url}/mdds-1.2.2.tar.bz2
Source103: %{external_url}/libcmis-0.5.1.tar.gz
Source104: %{external_url}/libwps-0.4.3.tar.bz2
Source104: %{external_url}/libwps-0.4.4.tar.bz2
Source105: %{external_url}/libpagemaker-0.0.3.tar.bz2
%global bundling_options %{?bundling_options} --without-system-ucpp --without-system-orcus --without-system-mdds --without-system-libcmis --without-system-libwps --without-system-libpagemaker
Source106: %{external_url}/libzmf-0.0.1.tar.bz2
Source107: %{external_url}/libstaroffice-0.0.2.tar.bz2
%global bundling_options %{?bundling_options} --without-system-ucpp --without-system-orcus --without-system-mdds --without-system-libcmis --without-system-libwps --without-system-libpagemaker --without-system-libzmf --without-system-libstaroffice
%endif
# build tools
@ -112,7 +114,6 @@ BuildRequires: git
BuildRequires: gperf
BuildRequires: icu
BuildRequires: make
BuildRequires: perl(Archive::Zip)
BuildRequires: perl(Digest::MD5)
%if 0%{?fedora}
BuildRequires: libappstream-glib
@ -193,13 +194,11 @@ BuildRequires: pkgconfig(libcmis-0.5)
BuildRequires: pkgconfig(libe-book-0.1)
BuildRequires: pkgconfig(libeot)
BuildRequires: pkgconfig(libgltf-0.0)
%if 0%{?fedora} >= 26
BuildRequires: pkgconfig(liborcus-0.12)
%else
BuildRequires: pkgconfig(liborcus-0.11)
%endif
BuildRequires: pkgconfig(libpagemaker-0.0)
BuildRequires: pkgconfig(libstaroffice-0.0)
BuildRequires: pkgconfig(libwps-0.4)
BuildRequires: pkgconfig(libzmf-0.0)
BuildRequires: pkgconfig(mdds-1.2)
%endif
@ -235,23 +234,7 @@ Patch3: 0001-Resolves-rhbz-1035092-no-shortcut-key-for-Italian-To.patch
Patch4: 0001-never-run-autogen.sh.patch
# not upstreamed
Patch5: 0001-add-X-TryExec-entries-to-desktop-files.patch
Patch6: 0001-Resolves-rhbz-1326304-cannot-detect-loss-of-wayland-.patch
Patch7: 0001-don-t-autocapitalize-words-that-follow-a-field-mark.patch
Patch8: 0001-a11y-crash-on-deleting-certain-frame-in-certain-docu.patch
Patch9: 0001-Resolves-rhbz-1351224-wayland-grab-related-crashes.patch
Patch10: 0001-Resolves-rhbz-1352965-gtk3-infinite-clipboard-recurs.patch
Patch11: 0001-Related-rhbz-1351369-gtk3-clipboards-have-to-live-to.patch
Patch12: 0001-add-xdg-email-as-the-default-email-route.patch
Patch13: 0001-Related-rhbz-1362451-avoid-recursive-ownerchanged-ha.patch
Patch14: 0001-only-date-autofilter-menus-need-the-space-for-the-tr.patch
Patch15: 0001-rhbz-1353069-don-t-record-undo-information-in-the-cl.patch
%if 0%{?fedora} >= 26
Patch400: 0001-Switch-from-orcus-0.11-to-orcus-0.12.patch
Patch401: 0001-Declare-font-border-protection-orcus-interface-metho.patch
Patch402: 0001-Add-odf-strikeout-to-orcus-interface.patch
Patch403: 0001-Reform-orcus-interface-to-set-border-width.patch
%endif
Patch6: 0001-rhbz-1353069-don-t-record-undo-information-in-the-cl.patch
%if 0%{?rhel}
# not upstreamed
@ -266,7 +249,7 @@ Patch500: 0001-disable-libe-book-support.patch
# rhbz#1085420 make sure we do not provide bundled libraries
%if 0%{?rhel}
%global libo_bundled_libs_filter ^liborcus(-parser)?-0\\.11\\.so.*$
%global libo_bundled_libs_filter ^liborcus(-parser)?-0\\.12\\.so.*$
%global __provides_exclude %{libo_bundled_libs_filter}
%global __requires_exclude %{libo_bundled_libs_filter}
%endif
@ -1103,7 +1086,6 @@ touch autogen.lastrun
--with-system-dicts \
--with-system-libs \
--without-fonts \
--without-system-npapi-headers \
--with-gdrive-client-secret="GYWrDtzyZQZ0_g5YoBCC6F0I" \
--with-gdrive-client-id="457862564325.apps.googleusercontent.com" \
%{distrooptions} \
@ -1755,6 +1737,7 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar
%{baseinstdir}/share/basic
%dir %{baseinstdir}/share/config
%{baseinstdir}/share/config/images_breeze.zip
%{baseinstdir}/share/config/images_breeze_dark.zip
%{baseinstdir}/share/config/images_galaxy.zip
%{baseinstdir}/share/config/images_hicontrast.zip
%{baseinstdir}/share/config/images_oxygen.zip
@ -1768,6 +1751,8 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar
%exclude %{baseinstdir}/share/config/soffice.cfg/modules/*/ui/res/*
%exclude %{baseinstdir}/share/config/soffice.cfg/*/ui/res/*
%endif
%dir %{baseinstdir}/share/emojiconfig
%{baseinstdir}/share/emojiconfig/emoji.json
%{baseinstdir}/share/palette
%{baseinstdir}/share/config/webcast
%{baseinstdir}/share/config/wizard
@ -1792,7 +1777,6 @@ rm -f %{buildroot}%{baseinstdir}/program/classes/smoketest.jar
%{baseinstdir}/share/template/en-US
%dir %{baseinstdir}/share/template/common
%{baseinstdir}/share/template/common/internal
%{baseinstdir}/share/template/common/layout
%{baseinstdir}/share/template/common/officorr
%{baseinstdir}/share/template/common/offimisc
%{baseinstdir}/share/template/common/personal
@ -1985,8 +1969,8 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
%{baseinstdir}/program/libforlo.so
%{baseinstdir}/program/libforuilo.so
%if 0%{?rhel}
%{baseinstdir}/program/liborcus-0.11.so.*
%{baseinstdir}/program/liborcus-parser-0.11.so.*
%{baseinstdir}/program/liborcus-0.12.so.*
%{baseinstdir}/program/liborcus-parser-0.12.so.*
%endif
%{baseinstdir}/program/libpricinglo.so
%{baseinstdir}/program/libsclo.so
@ -2305,6 +2289,9 @@ done
%endif
%changelog
* Sat Oct 22 2016 David Tardon <dtardon@redhat.com> - 1:5.3.0.0-1.alpha1
- update to 5.3.0 alpha1
* Fri Oct 21 2016 Marek Kasik <mkasik@redhat.com> - 1:5.2.3.1-2
- Rebuild for poppler-0.48.0

@ -7,6 +7,6 @@ a7983f859eafb2677d7ff386a023bc40 a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.
12fb8b5b0d5132726e57b9b9fc7e22c4 libreoffice-multiliblauncher.sh
4b87018f7fff1d054939d19920b751a0 4b87018f7fff1d054939d19920b751a0-collada2gltf-master-cb1d97788a.tar.bz2
ce12af00283eb90d9281956524250d6e ce12af00283eb90d9281956524250d6e-xmlsec1-1.2.20.tar.gz
b7fa8d5c0f803a5bb64bb8a58f0736e9 libreoffice-5.2.3.1.tar.xz
af7ffd5904e26ebbbefb18d441f2bd82 libreoffice-help-5.2.3.1.tar.xz
9f40ca74b0ce67badb61c089ed5ccea9 libreoffice-translations-5.2.3.1.tar.xz
10053ab054c79e1cd3a79371b2b7a148 libreoffice-5.3.0.0.alpha1.tar.xz
5a6c7b93705b72dfc4146544179a0e95 libreoffice-help-5.3.0.0.alpha1.tar.xz
ff8c262b8aa9b63c97973e16b4ec7acb libreoffice-translations-5.3.0.0.alpha1.tar.xz

Loading…
Cancel
Save