[Libreoffice-commits] core.git: vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Tue May 11 16:24:26 UTC 2021
vcl/unx/gtk3/fpicker/SalGtkPicker.cxx | 7 ------
vcl/unx/gtk3/gtksys.cxx | 39 ++++++++++++++++++++++++++++++++++
2 files changed, 39 insertions(+), 7 deletions(-)
New commits:
commit a9a9d66ec8fb07df7d5b08d94b6e0878006b6004
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue May 11 16:31:53 2021 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue May 11 18:23:40 2021 +0200
gtk4: replace gtk_dialog_run
with effectively the same thing, so still a loop within a loop.
File Dialog now appears and is semi-functional
Change-Id: Ibd7584c5e41b5de84975c3cb7886fe97a74d8587
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115438
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx b/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx
index 76c7739b723a..441cc8183402 100644
--- a/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx
+++ b/vcl/unx/gtk3/fpicker/SalGtkPicker.cxx
@@ -188,13 +188,6 @@ namespace
};
}
-#if GTK_CHECK_VERSION(4, 0, 0)
-gint gtk_dialog_run(GtkDialog*)
-{
- return 0;
-}
-#endif
-
gint RunDialog::run()
{
if (mxToolkit.is())
diff --git a/vcl/unx/gtk3/gtksys.cxx b/vcl/unx/gtk3/gtksys.cxx
index cf5461fef023..6a3701e10686 100644
--- a/vcl/unx/gtk3/gtksys.cxx
+++ b/vcl/unx/gtk3/gtksys.cxx
@@ -18,6 +18,7 @@
*/
#include <gtk/gtk.h>
+#include <unx/gtk/gtkdata.hxx>
#include <unx/gtk/gtkinst.hxx>
#include <unx/gtk/gtksys.hxx>
#include <unx/gtk/gtkbackend.hxx>
@@ -257,6 +258,44 @@ static OString MapToGtkAccelerator(const OUString &rStr)
return OUStringToOString(rStr.replaceFirst("~", "_"), RTL_TEXTENCODING_UTF8);
}
+#if GTK_CHECK_VERSION(4, 0, 0)
+
+namespace
+{
+ struct DialogLoop
+ {
+ GMainLoop* m_pLoop = nullptr;
+ gint nResponseId = GTK_RESPONSE_NONE;
+
+ static void DialogResponse(GtkDialog*, gint nResponseId, gpointer data)
+ {
+ DialogLoop* pDialogLoop = static_cast<DialogLoop*>(data);
+ pDialogLoop->nResponseId = nResponseId;
+ g_main_loop_quit(pDialogLoop->m_pLoop);
+ }
+
+ int run(GtkDialog *pDialog)
+ {
+ gulong nSignalResponseId = g_signal_connect(pDialog, "response", G_CALLBACK(DialogResponse), this);
+ gtk_window_present(GTK_WINDOW(pDialog));
+ m_pLoop = g_main_loop_new(nullptr, false);
+ main_loop_run(m_pLoop);
+ g_main_loop_unref(m_pLoop);
+ g_signal_handler_disconnect(pDialog, nSignalResponseId);
+ return nResponseId;
+ }
+
+ };
+}
+
+gint gtk_dialog_run(GtkDialog* pDialog)
+{
+ DialogLoop aDialogLoop;
+ return aDialogLoop.run(pDialog);
+}
+
+#endif
+
int GtkSalSystem::ShowNativeDialog (const OUString& rTitle, const OUString& rMessage,
const std::vector< OUString >& rButtonNames)
{
More information about the Libreoffice-commits
mailing list