[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - 11 commits - vcl/inc vcl/unx
Caolán McNamara
caolanm at redhat.com
Fri Jun 19 01:50:37 PDT 2015
vcl/inc/unx/gtk/gtkinst.hxx | 4
vcl/unx/generic/plugadapt/salplug.cxx | 8
vcl/unx/gtk3/app/gtk3gtkinst.cxx | 612 ++++++++++++++++++++++++++
vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 13
4 files changed, 620 insertions(+), 17 deletions(-)
New commits:
commit 0af056d72e9a26b52349babeefc27b6b2926803c
Author: Caolán McNamara <caolanm at redhat.com>
Date: Wed Jun 17 16:25:47 2015 +0100
use gtk3 vclplug by default under GNOME3 if available
Change-Id: I4efe8bdfb7080365094306aee9db6b69a7f9e86a
(cherry picked from commit 031a347668e56c1b38c0539d30e9a1cbb808ca02)
diff --git a/vcl/unx/generic/plugadapt/salplug.cxx b/vcl/unx/generic/plugadapt/salplug.cxx
index d49dccd..0d0b26d 100644
--- a/vcl/unx/generic/plugadapt/salplug.cxx
+++ b/vcl/unx/generic/plugadapt/salplug.cxx
@@ -68,14 +68,6 @@ static SalInstance* tryInstance( const OUString& rModuleBase, bool bForce = fals
return svp_create_SalInstance();
SalInstance* pInst = NULL;
- // Disable gtk3 plugin for now unless explicitly requested via
- // SAL_USE_VCLPLUGIN=gtk3 (would ideally depend on experimental mode, but
- // reading the experimental mode setting requires the UNO service manager
- // which has not yet been instantiated):
- if (!bForce && rModuleBase == "gtk3")
- {
- return NULL;
- }
OUString aModule(
#ifdef SAL_DLLPREFIX
SAL_DLLPREFIX
commit 9c04fca94f7b6723eab703caeccd4fd092b9ed2c
Author: Caolán McNamara <caolanm at redhat.com>
Date: Fri Jun 19 09:16:40 2015 +0100
gtk3: use owner-changed to detect losing/gaining clipboard ownership
and use the generic implementation (for now at least) for the PRIMARY
selection and use this for the CLIPBOARD selection
Change-Id: I31d65534481dc73f0cf65d68a663b7dfbb13aa31
(cherry picked from commit 4008b6f9bfd919a7435047bc0aedcf7613009809)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index 6a67255..a45a5e1 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -23,6 +23,7 @@
#include "com/sun/star/datatransfer/dnd/XDragSource.hpp"
#include "com/sun/star/datatransfer/dnd/XDropTarget.hpp"
#include "com/sun/star/datatransfer/dnd/DNDConstants.hpp"
+#include <comphelper/processfactory.hxx>
#include <comphelper/sequence.hxx>
#include "cppuhelper/compbase.hxx"
#include "cppuhelper/implbase1.hxx"
@@ -219,12 +220,51 @@ 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;
+
+typedef struct _ClipboardOwner ClipboardOwner;
+typedef struct _ClipboardOwnerClass ClipboardOwnerClass;
+
+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))
+
+G_DEFINE_TYPE(ClipboardOwner, clipboard_owner, G_TYPE_OBJECT);
+
+static void clipboard_owner_class_init (ClipboardOwnerClass *)
+{
+}
+
+static void clipboard_owner_init(ClipboardOwner *)
+{
+}
+
class VclGtkClipboard :
public cppu::WeakComponentImplHelper<
datatransfer::clipboard::XSystemClipboard,
XServiceInfo>
{
osl::Mutex m_aMutex;
+ ClipboardOwner* m_pOwner;
+ gulong m_nOwnerChangedSignalId;
Reference<css::datatransfer::XTransferable> m_aContents;
Reference<css::datatransfer::clipboard::XClipboardOwner> m_aOwner;
std::list< Reference<css::datatransfer::clipboard::XClipboardListener> > m_aListeners;
@@ -233,16 +273,8 @@ class VclGtkClipboard :
public:
- VclGtkClipboard() : cppu::WeakComponentImplHelper<
- datatransfer::clipboard::XSystemClipboard,
- XServiceInfo
- >( m_aMutex )
- {
- }
-
- virtual ~VclGtkClipboard()
- {
- }
+ VclGtkClipboard();
+ virtual ~VclGtkClipboard();
/*
* XServiceInfo
@@ -290,6 +322,7 @@ public:
void ClipboardGet(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info);
void ClipboardClear(GtkClipboard *clipboard);
+ void OwnerChanged(GtkClipboard *clipboard, GdkEvent *event);
private:
GtkTargetEntry makeGtkTargetEntry(const css::datatransfer::DataFlavor& rFlavor);
};
@@ -323,27 +356,11 @@ sal_Bool VclGtkClipboard::supportsService( const OUString& ServiceName ) throw(
Reference< css::datatransfer::XTransferable > VclGtkClipboard::getContents() throw( RuntimeException, std::exception )
{
- if (! m_aContents.is())
- m_aContents = new GtkTransferable();
-
- return m_aContents;
-}
-
-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)
+ if (!m_aContents.is())
{
- VclGtkClipboard* pThis = static_cast<VclGtkClipboard*>(user_data_or_owner);
- pThis->ClipboardClear(clipboard);
+ m_aContents = new GtkTransferable();
}
+ return m_aContents;
}
void VclGtkClipboard::ClipboardGet(GtkClipboard* /*clipboard*/, GtkSelectionData *selection_data,
@@ -405,6 +422,17 @@ void VclGtkClipboard::ClipboardGet(GtkClipboard* /*clipboard*/, GtkSelectionData
aData.getLength());
}
+void VclGtkClipboard::OwnerChanged(GtkClipboard* clipboard, GdkEvent* /*event*/)
+{
+ if (G_OBJECT(m_pOwner) != gtk_clipboard_get_owner(clipboard))
+ {
+ //null out m_aContents to return control to the system-one which
+ //will be retrieved if getContents is called again
+ setContents(Reference<css::datatransfer::XTransferable>(),
+ Reference<css::datatransfer::clipboard::XClipboardOwner>());
+ }
+}
+
void VclGtkClipboard::ClipboardClear(GtkClipboard * /*clipboard*/)
{
for (auto &a : m_aGtkTargets)
@@ -430,6 +458,47 @@ GtkTargetEntry VclGtkClipboard::makeGtkTargetEntry(const css::datatransfer::Data
return aEntry;
}
+namespace
+{
+ void ClipboardGetFunc(GtkClipboard *clipboard, GtkSelectionData *selection_data,
+ guint info,
+ gpointer user_data_or_owner)
+ {
+ VclGtkClipboard* pThis = CLIPBOARD_OWNER(user_data_or_owner)->m_pThis;
+ 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;
+ 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);
+ }
+}
+
+VclGtkClipboard::VclGtkClipboard()
+ : cppu::WeakComponentImplHelper<datatransfer::clipboard::XSystemClipboard, XServiceInfo>
+ (m_aMutex)
+{
+ GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ m_nOwnerChangedSignalId = g_signal_connect(clipboard, "owner-change",
+ G_CALLBACK(handle_owner_change), this);
+ m_pOwner = CLIPBOARD_OWNER(g_object_new(CLIPBOARD_OWNER_OBJECT, NULL));
+ m_pOwner->m_pThis = this;
+}
+
+VclGtkClipboard::~VclGtkClipboard()
+{
+ GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ g_signal_handler_disconnect(clipboard, m_nOwnerChangedSignalId);
+ g_object_unref(m_pOwner);
+}
+
void VclGtkClipboard::setContents(
const Reference< css::datatransfer::XTransferable >& xTrans,
const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
@@ -486,8 +555,10 @@ void VclGtkClipboard::setContents(
//if there was a previous gtk_clipboard_set_with_data call then
//ClipboardClearFunc will be called now
GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_with_data(clipboard, aGtkTargets.data(), aGtkTargets.size(),
- ClipboardGetFunc, ClipboardClearFunc, this);
+ //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));
m_aGtkTargets = aGtkTargets;
}
@@ -528,8 +599,25 @@ void VclGtkClipboard::removeClipboardListener( const Reference< datatransfer::cl
m_aListeners.remove( listener );
}
-Reference< XInterface > GtkInstance::CreateClipboard( const Sequence< Any >& )
+Reference< XInterface > GtkInstance::CreateClipboard(const Sequence< Any >& arguments)
{
+ OUString sel;
+ if (arguments.getLength() == 0) {
+ sel = "CLIPBOARD";
+ } else if (arguments.getLength() != 1 || !(arguments[0] >>= sel)) {
+ throw css::lang::IllegalArgumentException(
+ "bad GtkInstance::CreateClipboard arguments",
+ css::uno::Reference<css::uno::XInterface>(), -1);
+ }
+
+ //see window.cxx HAVE_FEATURE_X11 hack, for now just support the
+ //system clipboard and not the primary selection
+ if (sel != "CLIPBOARD")
+ {
+ Reference< XComponentContext > xContext(comphelper::getProcessComponentContext());
+ return xContext->getServiceManager()->createInstanceWithContext("com.sun.star.datatransfer.clipboard.GenericClipboard", xContext);
+ }
+
return Reference< XInterface >( static_cast<cppu::OWeakObject *>(new VclGtkClipboard()) );
}
commit 6ba65ce17f4fb0774f050beb9cfd1275032426af
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jun 18 16:33:16 2015 +0100
gtk3: unused param
Change-Id: I91fc320acf816d028186d25fd136f58c1c785d9d
(cherry picked from commit babe536ec227c04d10e55cd780e7021bf905aa82)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index baa558d..6a67255 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -346,7 +346,7 @@ namespace
}
}
-void VclGtkClipboard::ClipboardGet(GtkClipboard *clipboard, GtkSelectionData *selection_data,
+void VclGtkClipboard::ClipboardGet(GtkClipboard* /*clipboard*/, GtkSelectionData *selection_data,
guint info)
{
commit 62eb09d2f86f373b34cdb42be345ed2b1b007c1e
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jun 18 16:28:52 2015 +0100
gtk3: implement paste from us
Change-Id: Iea25d633a833965814a08d87954906e0133f7076
(cherry picked from commit 698120857eecc0afa90bc408a3e0a41eee21f1dd)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index ae5b338..baa558d 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -203,7 +203,7 @@ public:
return aVector;
}
- virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors()
+ virtual css::uno::Sequence<css::datatransfer::DataFlavor> SAL_CALL getTransferDataFlavors()
throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{
return comphelper::containerToSequence(getTransferDataFlavorsAsVector());
@@ -222,13 +222,14 @@ public:
class VclGtkClipboard :
public cppu::WeakComponentImplHelper<
datatransfer::clipboard::XSystemClipboard,
- XServiceInfo
- >
+ XServiceInfo>
{
- osl::Mutex m_aMutex;
- Reference< css::datatransfer::XTransferable > m_aContents;
- Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner;
- std::list< Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners;
+ osl::Mutex m_aMutex;
+ Reference<css::datatransfer::XTransferable> m_aContents;
+ Reference<css::datatransfer::clipboard::XClipboardOwner> m_aOwner;
+ std::list< Reference<css::datatransfer::clipboard::XClipboardListener> > m_aListeners;
+ std::vector<GtkTargetEntry> m_aGtkTargets;
+ std::vector<css::datatransfer::DataFlavor> m_aInfoToFlavor;
public:
@@ -238,6 +239,7 @@ public:
>( m_aMutex )
{
}
+
virtual ~VclGtkClipboard()
{
}
@@ -285,6 +287,11 @@ public:
virtual void SAL_CALL removeClipboardListener(
const Reference< css::datatransfer::clipboard::XClipboardListener >& listener )
throw(RuntimeException, std::exception) SAL_OVERRIDE;
+
+ void ClipboardGet(GtkClipboard *clipboard, GtkSelectionData *selection_data, guint info);
+ void ClipboardClear(GtkClipboard *clipboard);
+private:
+ GtkTargetEntry makeGtkTargetEntry(const css::datatransfer::DataFlavor& rFlavor);
};
OUString VclGtkClipboard::getImplementationName_static()
@@ -322,6 +329,107 @@ Reference< css::datatransfer::XTransferable > VclGtkClipboard::getContents() thr
return m_aContents;
}
+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 VclGtkClipboard::ClipboardGet(GtkClipboard *clipboard, GtkSelectionData *selection_data,
+ guint info)
+{
+
+ GdkAtom type(gdk_atom_intern(OUStringToOString(m_aInfoToFlavor[info].MimeType,
+ RTL_TEXTENCODING_UTF8).getStr(),
+ false));
+
+ css::datatransfer::DataFlavor aFlavor(m_aInfoToFlavor[info]);
+ if (aFlavor.MimeType == "UTF8_STRING" || aFlavor.MimeType == "STRING")
+ aFlavor.MimeType = "text/plain;charset=utf-8";
+
+ Sequence<sal_Int8> aData;
+ Any aValue;
+
+ try
+ {
+ aValue = m_aContents->getTransferData(aFlavor);
+ }
+ catch(...)
+ {
+ }
+
+ if (aValue.getValueTypeClass() == TypeClass_STRING)
+ {
+ OUString aString;
+ aValue >>= aString;
+ aData = Sequence< sal_Int8 >( reinterpret_cast<sal_Int8 const *>(aString.getStr()), aString.getLength() * sizeof( sal_Unicode ) );
+ }
+ else if (aValue.getValueType() == cppu::UnoType<Sequence< sal_Int8 >>::get())
+ {
+ aValue >>= aData;
+ }
+ else if (aFlavor.MimeType == "text/plain;charset=utf-8")
+ {
+ //didn't have utf-8, try utf-16 and convert
+ aFlavor.MimeType = "text/plain;charset=utf-16";
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+ try
+ {
+ aValue = m_aContents->getTransferData(aFlavor);
+ }
+ catch(...)
+ {
+ }
+ OUString aString;
+ aValue >>= aString;
+ OString aUTF8String(OUStringToOString(aString, RTL_TEXTENCODING_UTF8));
+ gtk_selection_data_set(selection_data, type, 8,
+ reinterpret_cast<const guchar *>(aUTF8String.getStr()),
+ aUTF8String.getLength());
+ return;
+ }
+
+ gtk_selection_data_set(selection_data, type, 8,
+ reinterpret_cast<const guchar *>(aData.getArray()),
+ aData.getLength());
+}
+
+void VclGtkClipboard::ClipboardClear(GtkClipboard * /*clipboard*/)
+{
+ for (auto &a : m_aGtkTargets)
+ free(a.target);
+ m_aGtkTargets.clear();
+}
+
+GtkTargetEntry VclGtkClipboard::makeGtkTargetEntry(const css::datatransfer::DataFlavor& rFlavor)
+{
+ GtkTargetEntry aEntry;
+ aEntry.target =
+ g_strdup(OUStringToOString(rFlavor.MimeType, RTL_TEXTENCODING_UTF8).getStr());
+ aEntry.flags = 0;
+ auto it = std::find_if(m_aInfoToFlavor.begin(), m_aInfoToFlavor.end(),
+ DataFlavorEq(rFlavor));
+ if (it != m_aInfoToFlavor.end())
+ aEntry.info = std::distance(m_aInfoToFlavor.begin(), it);
+ else
+ {
+ aEntry.info = m_aInfoToFlavor.size();
+ m_aInfoToFlavor.push_back(rFlavor);
+ }
+ return aEntry;
+}
+
void VclGtkClipboard::setContents(
const Reference< css::datatransfer::XTransferable >& xTrans,
const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
@@ -337,6 +445,52 @@ void VclGtkClipboard::setContents(
datatransfer::clipboard::ClipboardEvent aEv;
aEv.Contents = m_aContents;
+ if (m_aContents.is())
+ {
+ css::uno::Sequence<css::datatransfer::DataFlavor> aFormats = xTrans->getTransferDataFlavors();
+ std::vector<GtkTargetEntry> aGtkTargets;
+ bool bHaveText(false), bHaveUTF8(false);
+ for (int i = 0; i < aFormats.getLength(); ++i)
+ {
+ const css::datatransfer::DataFlavor& rFlavor = aFormats[i];
+
+ sal_Int32 nIndex(0);
+ if (rFlavor.MimeType.getToken(0, ';', nIndex) == "text/plain")
+ {
+ bHaveText = true;
+ OUString aToken(rFlavor.MimeType.getToken(0, ';', nIndex));
+ if (aToken == "charset=utf-8")
+ {
+ bHaveUTF8 = true;
+ }
+ }
+ GtkTargetEntry aEntry(makeGtkTargetEntry(rFlavor));
+ aGtkTargets.push_back(aEntry);
+ }
+
+ if (bHaveText)
+ {
+ css::datatransfer::DataFlavor aFlavor;
+ aFlavor.DataType = cppu::UnoType<Sequence< sal_Int8 >>::get();
+ if (!bHaveUTF8)
+ {
+ aFlavor.MimeType = "text/plain;charset=utf-8";
+ aGtkTargets.push_back(makeGtkTargetEntry(aFlavor));
+ }
+ aFlavor.MimeType = "UTF8_STRING";
+ aGtkTargets.push_back(makeGtkTargetEntry(aFlavor));
+ aFlavor.MimeType = "STRING";
+ aGtkTargets.push_back(makeGtkTargetEntry(aFlavor));
+ }
+
+ //if there was a previous gtk_clipboard_set_with_data call then
+ //ClipboardClearFunc will be called now
+ GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_with_data(clipboard, aGtkTargets.data(), aGtkTargets.size(),
+ ClipboardGetFunc, ClipboardClearFunc, this);
+ m_aGtkTargets = aGtkTargets;
+ }
+
aGuard.clear();
if( xOldOwner.is() && xOldOwner != xClipboardOwner )
commit a037aa409c6818ea00bd7d9f6aace476bcda0d4f
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jun 18 14:02:54 2015 +0100
gtk3: little code cleanup
Change-Id: I3e0f1fe0376ddcf9e79e6815a13f54007d47b03e
(cherry picked from commit ceb31879c4fc3dd3e62a45318f22c1f69db9974a)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index 0b5ea9f..ae5b338 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -98,14 +98,6 @@ class GtkTransferable : public ::cppu::WeakImplHelper1 <
private:
std::map<OUString, GdkAtom> m_aMimeTypeToAtom;
public:
- GtkTransferable()
- {
- }
-
- virtual ~GtkTransferable()
- {
- }
-
/*
* XTransferable
*/
@@ -246,7 +238,9 @@ public:
>( m_aMutex )
{
}
- virtual ~VclGtkClipboard();
+ virtual ~VclGtkClipboard()
+ {
+ }
/*
* XServiceInfo
@@ -293,10 +287,6 @@ public:
throw(RuntimeException, std::exception) SAL_OVERRIDE;
};
-VclGtkClipboard::~VclGtkClipboard()
-{
-}
-
OUString VclGtkClipboard::getImplementationName_static()
{
return OUString( "com.sun.star.datatransfer.VclGtkClipboard" );
commit d04085c7c334c42efa0d1543c482628a9312c138
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jun 18 13:56:29 2015 +0100
gtk3: implement isDataFlavorSupported
Change-Id: Ia381d26a1c6a8f22aafef924215bc64b3c3473c6
(cherry picked from commit a26d21acb34d6e35a12cf8afa3cc64701f384687)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index cb26b26..0b5ea9f 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -77,6 +77,19 @@ namespace
// PIXMAP
{ "PIXMAP", "image/bmp" }
};
+
+ class DataFlavorEq : public std::unary_function<const css::datatransfer::DataFlavor&, bool>
+ {
+ private:
+ const css::datatransfer::DataFlavor& m_rData;
+ public:
+ explicit DataFlavorEq(const css::datatransfer::DataFlavor& rData) : m_rData(rData) {}
+ bool operator() (const css::datatransfer::DataFlavor& rData) const
+ {
+ return rData.MimeType == m_rData.MimeType &&
+ rData.DataType == m_rData.DataType;
+ }
+ };
}
class GtkTransferable : public ::cppu::WeakImplHelper1 <
@@ -131,12 +144,12 @@ public:
return aRet;
}
- virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors( )
- throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE
+ std::vector<css::datatransfer::DataFlavor> getTransferDataFlavorsAsVector()
{
+ std::vector<css::datatransfer::DataFlavor> aVector;
+
GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- std::vector<css::datatransfer::DataFlavor> aVector;
GdkAtom *targets;
gint n_targets;
if (gtk_clipboard_wait_for_targets(clipboard, &targets, &n_targets))
@@ -195,16 +208,22 @@ public:
}
}
- return comphelper::containerToSequence(aVector);
+ return aVector;
+ }
+
+ virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors()
+ throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE
+ {
+ return comphelper::containerToSequence(getTransferDataFlavorsAsVector());
}
- virtual sal_Bool SAL_CALL isDataFlavorSupported( const css::datatransfer::DataFlavor& aFlavor )
+ virtual sal_Bool SAL_CALL isDataFlavorSupported(const css::datatransfer::DataFlavor& rFlavor)
throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{
- fprintf(stderr, "TODO isDataFlavorSupported\n");
+ const std::vector<css::datatransfer::DataFlavor> aAll =
+ getTransferDataFlavorsAsVector();
- (void)aFlavor;
- return false;
+ return std::find_if(aAll.begin(), aAll.end(), DataFlavorEq(rFlavor)) != aAll.end();
}
};
commit 08662de9af02d4ceefc1701a5628729ffdcb3adf
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jun 18 13:37:52 2015 +0100
gtk3: implement paste everything else into us
Change-Id: I39c3e5646a5a1ea07aa881cad584a0b7ae9bd005
(cherry picked from commit 50cfcd91a0893ff795fc1cf1a2e7c3f7c6da5326)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index a96d1e4..cb26b26 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -82,6 +82,8 @@ namespace
class GtkTransferable : public ::cppu::WeakImplHelper1 <
css::datatransfer::XTransferable >
{
+private:
+ std::map<OUString, GdkAtom> m_aMimeTypeToAtom;
public:
GtkTransferable()
{
@@ -95,24 +97,37 @@ public:
* XTransferable
*/
- virtual css::uno::Any SAL_CALL getTransferData( const css::datatransfer::DataFlavor& aFlavor )
+ virtual css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor& rFlavor)
throw(css::datatransfer::UnsupportedFlavorException,
css::io::IOException,
css::uno::RuntimeException, std::exception
) SAL_OVERRIDE
{
- css::uno::Any aRet;
GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- if (aFlavor.MimeType == "text/plain;charset=utf-16")
+ if (rFlavor.MimeType == "text/plain;charset=utf-16")
{
gchar *pText = gtk_clipboard_wait_for_text(clipboard);
OUString aStr(pText, rtl_str_getLength(pText),
RTL_TEXTENCODING_UTF8);
g_free(pText);
+ css::uno::Any aRet;
aRet <<= aStr.replaceAll("\r\n", "\n");
+ return aRet;
}
- else
- fprintf(stderr, "TO-DO getTransferData %s\n", OUStringToOString(aFlavor.MimeType, RTL_TEXTENCODING_UTF8).getStr());
+
+ auto it = m_aMimeTypeToAtom.find(rFlavor.MimeType);
+ if (it == m_aMimeTypeToAtom.end())
+ return css::uno::Any();
+
+ css::uno::Any aRet;
+ GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard,
+ it->second);
+ gint length;
+ const guchar *rawdata = gtk_selection_data_get_data_with_length(data,
+ &length);
+ Sequence<sal_Int8> aSeq(reinterpret_cast<const sal_Int8*>(rawdata), length);
+ gtk_selection_data_free(data);
+ aRet <<= aSeq;
return aRet;
}
@@ -146,6 +161,9 @@ public:
aFlavor.MimeType = OUString(pFinalName,
rtl_str_getLength(pFinalName),
RTL_TEXTENCODING_UTF8);
+
+ m_aMimeTypeToAtom[aFlavor.MimeType] = targets[i];
+
aFlavor.DataType = cppu::UnoType<Sequence< sal_Int8 >>::get();
sal_Int32 nIndex(0);
commit 87d95f2933044fc7abf61bdea0349f32bba4ce76
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu Jun 18 11:40:47 2015 +0100
gtk3: implement most common case of text paste into us
Change-Id: I733dd57e27330bc200f718ffb5680bbb81d5d77d
(cherry picked from commit fe9da15401574551c34fffbd4e63eddca9743527)
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index 902dd66..a96d1e4 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -101,9 +101,19 @@ public:
css::uno::RuntimeException, std::exception
) SAL_OVERRIDE
{
- fprintf(stderr, "TO-DO getTransferData\n");
- (void)aFlavor;
- return css::uno::Any();
+ css::uno::Any aRet;
+ GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ if (aFlavor.MimeType == "text/plain;charset=utf-16")
+ {
+ gchar *pText = gtk_clipboard_wait_for_text(clipboard);
+ OUString aStr(pText, rtl_str_getLength(pText),
+ RTL_TEXTENCODING_UTF8);
+ g_free(pText);
+ aRet <<= aStr.replaceAll("\r\n", "\n");
+ }
+ else
+ fprintf(stderr, "TO-DO getTransferData %s\n", OUStringToOString(aFlavor.MimeType, RTL_TEXTENCODING_UTF8).getStr());
+ return aRet;
}
virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors( )
commit 9c1fa2a581483ef42ac2f8604915752d352606d7
Author: Caolán McNamara <caolanm at redhat.com>
Date: Wed Jun 17 16:50:39 2015 +0100
gtk3 clipboard support
doesn't work yet, but reports correctly what external formats
are available
Change-Id: I11cf9440ca516d4358c341fa67cc836b30ca42d6
(cherry picked from commit b461e3189b9a95deef1e6c5e03b0e657b5754dfa)
diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx
index fa61f07..28bca36 100644
--- a/vcl/inc/unx/gtk/gtkinst.hxx
+++ b/vcl/inc/unx/gtk/gtkinst.hxx
@@ -94,6 +94,10 @@ public:
createFolderPicker( const com::sun::star::uno::Reference<
com::sun::star::uno::XComponentContext >& ) SAL_OVERRIDE;
+#if GTK_CHECK_VERSION(3,0,0)
+ virtual css::uno::Reference< css::uno::XInterface > CreateClipboard( const css::uno::Sequence< css::uno::Any >& i_rArguments ) SAL_OVERRIDE;
+#endif
+
void RemoveTimer (SalTimer *pTimer);
// for managing a mirror of the in-flight un-dispatched gdk event queue
diff --git a/vcl/unx/gtk3/app/gtk3gtkinst.cxx b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
index c8cf298..902dd66 100644
--- a/vcl/unx/gtk3/app/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/app/gtk3gtkinst.cxx
@@ -9,4 +9,337 @@
#include "../../gtk/app/gtkinst.cxx"
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleServiceFactory.hpp"
+#include "com/sun/star/lang/XInitialization.hpp"
+#include "com/sun/star/lang/DisposedException.hpp"
+#include "com/sun/star/datatransfer/XTransferable.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboard.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboardEx.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboardNotifier.hpp"
+#include "com/sun/star/datatransfer/clipboard/XClipboardListener.hpp"
+#include "com/sun/star/datatransfer/clipboard/XSystemClipboard.hpp"
+#include "com/sun/star/datatransfer/dnd/XDragSource.hpp"
+#include "com/sun/star/datatransfer/dnd/XDropTarget.hpp"
+#include "com/sun/star/datatransfer/dnd/DNDConstants.hpp"
+#include <comphelper/sequence.hxx>
+#include "cppuhelper/compbase.hxx"
+#include "cppuhelper/implbase1.hxx"
+#include <cppuhelper/supportsservice.hxx>
+
+using namespace com::sun::star;
+using namespace com::sun::star::uno;
+using namespace com::sun::star::lang;
+
+namespace
+{
+ struct TypeEntry
+ {
+ const char* pNativeType; // string corresponding to nAtom for the case of nAtom being uninitialized
+ const char* pType; // Mime encoding on our side
+ };
+
+ static TypeEntry aConversionTab[] =
+ {
+ { "ISO10646-1", "text/plain;charset=utf-16" },
+ { "UTF8_STRING", "text/plain;charset=utf-8" },
+ { "UTF-8", "text/plain;charset=utf-8" },
+ { "text/plain;charset=UTF-8", "text/plain;charset=utf-8" },
+ // ISO encodings
+ { "ISO8859-2", "text/plain;charset=iso8859-2" },
+ { "ISO8859-3", "text/plain;charset=iso8859-3" },
+ { "ISO8859-4", "text/plain;charset=iso8859-4" },
+ { "ISO8859-5", "text/plain;charset=iso8859-5" },
+ { "ISO8859-6", "text/plain;charset=iso8859-6" },
+ { "ISO8859-7", "text/plain;charset=iso8859-7" },
+ { "ISO8859-8", "text/plain;charset=iso8859-8" },
+ { "ISO8859-9", "text/plain;charset=iso8859-9" },
+ { "ISO8859-10", "text/plain;charset=iso8859-10" },
+ { "ISO8859-13", "text/plain;charset=iso8859-13" },
+ { "ISO8859-14", "text/plain;charset=iso8859-14" },
+ { "ISO8859-15", "text/plain;charset=iso8859-15" },
+ // asian encodings
+ { "JISX0201.1976-0", "text/plain;charset=jisx0201.1976-0" },
+ { "JISX0208.1983-0", "text/plain;charset=jisx0208.1983-0" },
+ { "JISX0208.1990-0", "text/plain;charset=jisx0208.1990-0" },
+ { "JISX0212.1990-0", "text/plain;charset=jisx0212.1990-0" },
+ { "GB2312.1980-0", "text/plain;charset=gb2312.1980-0" },
+ { "KSC5601.1992-0", "text/plain;charset=ksc5601.1992-0" },
+ // eastern european encodings
+ { "KOI8-R", "text/plain;charset=koi8-r" },
+ { "KOI8-U", "text/plain;charset=koi8-u" },
+ // String (== iso8859-1)
+ { "STRING", "text/plain;charset=iso8859-1" },
+ // special for compound text
+ { "COMPOUND_TEXT", "text/plain;charset=compound_text" },
+
+ // PIXMAP
+ { "PIXMAP", "image/bmp" }
+ };
+}
+
+class GtkTransferable : public ::cppu::WeakImplHelper1 <
+ css::datatransfer::XTransferable >
+{
+public:
+ GtkTransferable()
+ {
+ }
+
+ virtual ~GtkTransferable()
+ {
+ }
+
+ /*
+ * XTransferable
+ */
+
+ virtual css::uno::Any SAL_CALL getTransferData( const css::datatransfer::DataFlavor& aFlavor )
+ throw(css::datatransfer::UnsupportedFlavorException,
+ css::io::IOException,
+ css::uno::RuntimeException, std::exception
+ ) SAL_OVERRIDE
+ {
+ fprintf(stderr, "TO-DO getTransferData\n");
+ (void)aFlavor;
+ return css::uno::Any();
+ }
+
+ virtual css::uno::Sequence< css::datatransfer::DataFlavor > SAL_CALL getTransferDataFlavors( )
+ throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE
+ {
+ GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+
+ std::vector<css::datatransfer::DataFlavor> aVector;
+ GdkAtom *targets;
+ gint n_targets;
+ if (gtk_clipboard_wait_for_targets(clipboard, &targets, &n_targets))
+ {
+ bool bHaveText = false, bHaveUTF16 = false;
+
+ for (gint i = 0; i < n_targets; ++i)
+ {
+ gchar* pName = gdk_atom_name(targets[i]);
+ const char* pFinalName = pName;
+ css::datatransfer::DataFlavor aFlavor;
+
+ for (size_t j = 0; j < SAL_N_ELEMENTS(aConversionTab); ++j)
+ {
+ if (rtl_str_compare(pName, aConversionTab[j].pNativeType) == 0)
+ {
+ pFinalName = aConversionTab[j].pType;
+ break;
+ }
+ }
+
+ aFlavor.MimeType = OUString(pFinalName,
+ rtl_str_getLength(pFinalName),
+ RTL_TEXTENCODING_UTF8);
+ aFlavor.DataType = cppu::UnoType<Sequence< sal_Int8 >>::get();
+
+ sal_Int32 nIndex(0);
+ if (aFlavor.MimeType.getToken(0, ';', nIndex) == "text/plain")
+ {
+ bHaveText = true;
+ OUString aToken(aFlavor.MimeType.getToken(0, ';', nIndex));
+ if (aToken == "charset=utf-16")
+ {
+ bHaveUTF16 = true;
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+ }
+ }
+ aVector.push_back(aFlavor);
+ g_free(pName);
+ }
+
+ g_free(targets);
+
+ //If we have text, but no UTF-16 format which is basically the only
+ //text-format LibreOffice supports for cnp then claim we do and we
+ //will convert on demand
+ if (bHaveText && !bHaveUTF16)
+ {
+ css::datatransfer::DataFlavor aFlavor;
+ aFlavor.MimeType = "text/plain;charset=utf-16";
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+ aVector.push_back(aFlavor);
+ }
+ }
+
+ return comphelper::containerToSequence(aVector);
+ }
+
+ virtual sal_Bool SAL_CALL isDataFlavorSupported( const css::datatransfer::DataFlavor& aFlavor )
+ throw(css::uno::RuntimeException, std::exception) SAL_OVERRIDE
+ {
+ fprintf(stderr, "TODO isDataFlavorSupported\n");
+
+ (void)aFlavor;
+ return false;
+ }
+};
+
+class VclGtkClipboard :
+ public cppu::WeakComponentImplHelper<
+ datatransfer::clipboard::XSystemClipboard,
+ XServiceInfo
+ >
+{
+ osl::Mutex m_aMutex;
+ Reference< css::datatransfer::XTransferable > m_aContents;
+ Reference< css::datatransfer::clipboard::XClipboardOwner > m_aOwner;
+ std::list< Reference< css::datatransfer::clipboard::XClipboardListener > > m_aListeners;
+
+public:
+
+ VclGtkClipboard() : cppu::WeakComponentImplHelper<
+ datatransfer::clipboard::XSystemClipboard,
+ XServiceInfo
+ >( m_aMutex )
+ {
+ }
+ virtual ~VclGtkClipboard();
+
+ /*
+ * XServiceInfo
+ */
+
+ virtual OUString SAL_CALL getImplementationName() throw( RuntimeException, std::exception ) SAL_OVERRIDE;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw( RuntimeException, std::exception ) SAL_OVERRIDE;
+ virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw( RuntimeException, std::exception ) SAL_OVERRIDE;
+
+ static OUString getImplementationName_static();
+ static Sequence< OUString > getSupportedServiceNames_static();
+
+ /*
+ * XClipboard
+ */
+
+ virtual Reference< css::datatransfer::XTransferable > SAL_CALL getContents()
+ throw(RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL setContents(
+ const Reference< css::datatransfer::XTransferable >& xTrans,
+ const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
+ throw(RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual OUString SAL_CALL getName()
+ throw(RuntimeException, std::exception) SAL_OVERRIDE;
+
+ /*
+ * XClipboardEx
+ */
+
+ virtual sal_Int8 SAL_CALL getRenderingCapabilities()
+ throw(RuntimeException, std::exception) SAL_OVERRIDE;
+
+ /*
+ * XClipboardNotifier
+ */
+ virtual void SAL_CALL addClipboardListener(
+ const Reference< css::datatransfer::clipboard::XClipboardListener >& listener )
+ throw(RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL removeClipboardListener(
+ const Reference< css::datatransfer::clipboard::XClipboardListener >& listener )
+ throw(RuntimeException, std::exception) SAL_OVERRIDE;
+};
+
+VclGtkClipboard::~VclGtkClipboard()
+{
+}
+
+OUString VclGtkClipboard::getImplementationName_static()
+{
+ return OUString( "com.sun.star.datatransfer.VclGtkClipboard" );
+}
+
+Sequence< OUString > VclGtkClipboard::getSupportedServiceNames_static()
+{
+ Sequence< OUString > aRet(1);
+ aRet[0] = "com.sun.star.datatransfer.clipboard.SystemClipboard";
+ return aRet;
+}
+
+OUString VclGtkClipboard::getImplementationName() throw( RuntimeException, std::exception )
+{
+ return getImplementationName_static();
+}
+
+Sequence< OUString > VclGtkClipboard::getSupportedServiceNames() throw( RuntimeException, std::exception )
+{
+ return getSupportedServiceNames_static();
+}
+
+sal_Bool VclGtkClipboard::supportsService( const OUString& ServiceName ) throw( RuntimeException, std::exception )
+{
+ return cppu::supportsService(this, ServiceName);
+}
+
+Reference< css::datatransfer::XTransferable > VclGtkClipboard::getContents() throw( RuntimeException, std::exception )
+{
+ if (! m_aContents.is())
+ m_aContents = new GtkTransferable();
+
+ return m_aContents;
+}
+
+void VclGtkClipboard::setContents(
+ const Reference< css::datatransfer::XTransferable >& xTrans,
+ const Reference< css::datatransfer::clipboard::XClipboardOwner >& xClipboardOwner )
+ throw( RuntimeException, std::exception )
+{
+ osl::ClearableMutexGuard aGuard( m_aMutex );
+ Reference< datatransfer::clipboard::XClipboardOwner > xOldOwner( m_aOwner );
+ Reference< datatransfer::XTransferable > xOldContents( m_aContents );
+ m_aContents = xTrans;
+ m_aOwner = xClipboardOwner;
+
+ std::list< Reference< datatransfer::clipboard::XClipboardListener > > xListeners( m_aListeners );
+ datatransfer::clipboard::ClipboardEvent aEv;
+ aEv.Contents = m_aContents;
+
+ aGuard.clear();
+
+ if( xOldOwner.is() && xOldOwner != xClipboardOwner )
+ xOldOwner->lostOwnership( this, xOldContents );
+ for( std::list< Reference< datatransfer::clipboard::XClipboardListener > >::iterator it =
+ xListeners.begin(); it != xListeners.end() ; ++it )
+ {
+ (*it)->changedContents( aEv );
+ }
+}
+
+OUString VclGtkClipboard::getName() throw( RuntimeException, std::exception )
+{
+ return OUString( "CLIPBOARD" );
+}
+
+sal_Int8 VclGtkClipboard::getRenderingCapabilities() throw( RuntimeException, std::exception )
+{
+ return 0;
+}
+
+void VclGtkClipboard::addClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener )
+ throw( RuntimeException, std::exception )
+{
+ osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ m_aListeners.push_back( listener );
+}
+
+void VclGtkClipboard::removeClipboardListener( const Reference< datatransfer::clipboard::XClipboardListener >& listener )
+ throw( RuntimeException, std::exception )
+{
+ osl::ClearableMutexGuard aGuard( m_aMutex );
+
+ m_aListeners.remove( listener );
+}
+
+Reference< XInterface > GtkInstance::CreateClipboard( const Sequence< Any >& )
+{
+ return Reference< XInterface >( static_cast<cppu::OWeakObject *>(new VclGtkClipboard()) );
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 1f4766d592101c8c89ca774b15c03769bd9e6d6b
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sat May 30 21:20:14 2015 +0100
coverity#1302608 gtk3 Logically dead code
Change-Id: I7e727bc71a5fb02d89eb6b4fb35cda26bcfa617a
(cherry picked from commit 1abbba1d0980786b4bded6961a12da494cb93806)
diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
index a782bf8..3b06626 100644
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
@@ -87,11 +87,10 @@ enum {
RENDER_SCROLLBAR = 9,
RENDER_SPINBUTTON = 10,
RENDER_COMBOBOX = 11,
- RENDER_EXTENSION = 12,
- RENDER_EXPANDER = 13,
- RENDER_ICON = 14,
- RENDER_PROGRESS = 15,
- RENDER_FOCUS = 16,
+ RENDER_EXPANDER = 12,
+ RENDER_ICON = 13,
+ RENDER_PROGRESS = 14,
+ RENDER_FOCUS = 15,
};
static void NWCalcArrowRect( const Rectangle& rButton, Rectangle& rArrow )
@@ -1089,9 +1088,6 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co
gtk_render_frame(context, cr, nX, nY, nWidth, nHeight);
}
break;
- case RENDER_EXTENSION:
- gtk_render_extension(context, cr, nX, nY, nWidth, nHeight, GTK_POS_BOTTOM);
- break;
case RENDER_CHECK:
case RENDER_RADIO:
PaintCheckOrRadio(context, cr, rControlRegion, nType);
commit d9db5a56b1f0504219067048e9fd4a47429c3d8d
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sat May 30 21:18:20 2015 +0100
coverity#1302691 gtk3 Unused value
Change-Id: Iabd10ef2c77dc389c6afdba1d38064e54bf3198d
(cherry picked from commit 0b25823eced797ab039f26fe51df73c7aa3e1130)
diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
index 9cdf850..a782bf8 100644
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
@@ -1648,7 +1648,6 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
case PANGO_STRETCH_EXTRA_EXPANDED: aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED;break;
case PANGO_STRETCH_ULTRA_EXPANDED: aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED;break;
}
- aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED;
#if OSL_DEBUG_LEVEL > 1
fprintf( stderr, "font name BEFORE system match: \"%s\"\n", aFamily.getStr() );
More information about the Libreoffice-commits
mailing list