You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/mail-client/claws-mail/files/claws-mail-4.2.0-gtksocket....

215 lines
7.3 KiB

From dd4c4e5152235f9f4f319cc9fdad9227ebf688c9 Mon Sep 17 00:00:00 2001
From: Jonathan Boeing <jonathan@claws-mail.org>
Date: Sat, 18 Nov 2023 18:51:30 -0700
Subject: [PATCH] Fix building on non-X11 systems
Gtk Sockets and the GDK_IS_X11_DISPLAY() macro are only available when
GDK_WINDOWING_X11 is defined
---
src/action.c | 3 ++
src/compose.c | 78 ++++++++++++++++++--------------
src/plugins/dillo/dillo_viewer.c | 5 ++
3 files changed, 53 insertions(+), 33 deletions(-)
diff --git a/src/action.c b/src/action.c
index d86294fbc..0c459aab6 100644
--- a/src/action.c
+++ b/src/action.c
@@ -30,6 +30,9 @@
#ifdef GDK_WINDOWING_X11
# include <gdk/gdkx.h>
#endif /* GDK_WINDOWING_X11 */
+#ifdef GDK_WINDOWING_QUARTZ
+# include <gdk/gdkquartz.h>
+#endif /* GDK_WINDOWING_QUARTZ */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/compose.c b/src/compose.c
index 574d89be1..b32fa6bc7 100644
--- a/src/compose.c
+++ b/src/compose.c
@@ -375,11 +375,11 @@ static void compose_set_ext_editor_sensitive (Compose *compose,
gboolean sensitive);
static gboolean compose_get_ext_editor_cmd_valid();
static gboolean compose_get_ext_editor_uses_socket();
-#ifndef G_OS_WIN32
+#ifdef GDK_WINDOWING_X11
static gboolean compose_ext_editor_plug_removed_cb
(GtkSocket *socket,
Compose *compose);
-#endif /* G_OS_WIN32 */
+#endif /* GDK_WINDOWING_X11 */
static void compose_undo_state_changed (UndoMain *undostruct,
gint undo_state,
@@ -9623,11 +9623,11 @@ static gboolean compose_can_autosave(Compose *compose)
static void compose_exec_ext_editor(Compose *compose)
{
gchar *tmp;
-#ifndef G_OS_WIN32
+#ifdef GDK_WINDOWING_X11
GtkWidget *socket;
Window socket_wid = 0;
gchar *p, *s;
-#endif /* G_OS_WIN32 */
+#endif /* GDK_WINDOWING_X11 */
GPid pid;
GError *error = NULL;
gchar *cmd = NULL;
@@ -9643,39 +9643,43 @@ static void compose_exec_ext_editor(Compose *compose)
return;
}
- if (compose_get_ext_editor_uses_socket() && GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
-#ifndef G_OS_WIN32
- /* Only allow one socket */
- if (compose->exteditor_socket != NULL) {
- if (gtk_widget_is_focus(compose->exteditor_socket)) {
- /* Move the focus off of the socket */
- gtk_widget_child_focus(compose->window, GTK_DIR_TAB_BACKWARD);
+#ifdef GDK_WINDOWING_X11
+ if (compose_get_ext_editor_uses_socket()) {
+ if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
+ /* Only allow one socket */
+ if (compose->exteditor_socket != NULL) {
+ if (gtk_widget_is_focus(compose->exteditor_socket)) {
+ /* Move the focus off of the socket */
+ gtk_widget_child_focus(compose->window, GTK_DIR_TAB_BACKWARD);
+ }
+ g_free(tmp);
+ return;
}
- g_free(tmp);
- return;
- }
- /* Create the receiving GtkSocket */
- socket = gtk_socket_new ();
- g_signal_connect (G_OBJECT(socket), "plug-removed",
- G_CALLBACK(compose_ext_editor_plug_removed_cb),
- compose);
- gtk_box_pack_start(GTK_BOX(compose->edit_vbox), socket, TRUE, TRUE, 0);
- gtk_widget_set_size_request(socket, prefs_common.compose_width, -1);
- /* Realize the socket so that we can use its ID */
- gtk_widget_realize(socket);
- socket_wid = gtk_socket_get_id(GTK_SOCKET (socket));
- compose->exteditor_socket = socket;
+ /* Create the receiving GtkSocket */
+ socket = gtk_socket_new ();
+ g_signal_connect (G_OBJECT(socket), "plug-removed",
+ G_CALLBACK(compose_ext_editor_plug_removed_cb),
+ compose);
+ gtk_box_pack_start(GTK_BOX(compose->edit_vbox), socket, TRUE, TRUE, 0);
+ gtk_widget_set_size_request(socket, prefs_common.compose_width, -1);
+ /* Realize the socket so that we can use its ID */
+ gtk_widget_realize(socket);
+ socket_wid = gtk_socket_get_id(GTK_SOCKET (socket));
+ compose->exteditor_socket = socket;
+ } else
+ debug_print("Socket communication with an external editor is only available on X11.\n");
+ }
#else
- alertpanel_error(_("Socket communication with an external editor is not available on Windows."));
+ if (compose_get_ext_editor_uses_socket()) {
+ alertpanel_error(_("Socket communication with an external editor is only available on X11."));
g_free(tmp);
return;
-#endif /* G_OS_WIN32 */
- } else
- debug_print("Socket communication with an external editor is only available on X11.\n");
+ }
+#endif /* GDK_WINDOWING_X11 */
if (compose_get_ext_editor_cmd_valid()) {
+#ifdef GDK_WINDOWING_X11
if (compose_get_ext_editor_uses_socket() && GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
-#ifndef G_OS_WIN32
p = g_strdup(prefs_common_get_ext_editor_cmd());
s = strstr(p, "%w");
s[1] = 'u';
@@ -9684,10 +9688,12 @@ static void compose_exec_ext_editor(Compose *compose)
else
cmd = g_strdup_printf(p, socket_wid, tmp);
g_free(p);
-#endif /* G_OS_WIN32 */
} else {
cmd = g_strdup_printf(prefs_common_get_ext_editor_cmd(), tmp);
}
+#else
+ cmd = g_strdup_printf(prefs_common_get_ext_editor_cmd(), tmp);
+#endif /* GDK_WINDOWING_X11 */
} else {
if (prefs_common_get_ext_editor_cmd())
g_warning("external editor command-line is invalid: '%s'",
@@ -9776,10 +9782,12 @@ static void compose_ext_editor_closed_cb(GPid pid, gint exit_status, gpointer da
compose->exteditor_file = NULL;
compose->exteditor_pid = INVALID_PID;
compose->exteditor_tag = -1;
+#ifdef GDK_WINDOWING_X11
if (compose->exteditor_socket && GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
gtk_widget_destroy(compose->exteditor_socket);
compose->exteditor_socket = NULL;
}
+#endif /* GDK_WINDOWING_X11 */
}
@@ -9887,6 +9895,7 @@ static void compose_set_ext_editor_sensitive(Compose *compose,
ext_editor_menu_entries[i], sensitive);
}
+#ifdef GDK_WINDOWING_X11
if (compose_get_ext_editor_uses_socket() && GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
if (sensitive) {
if (compose->exteditor_socket)
@@ -9910,6 +9919,9 @@ static void compose_set_ext_editor_sensitive(Compose *compose,
} else {
gtk_widget_set_sensitive(compose->text, sensitive);
}
+#else
+ gtk_widget_set_sensitive(compose->text, sensitive);
+#endif /* GDK_WINDOWING_X11 */
if (compose->toolbar->send_btn)
gtk_widget_set_sensitive(compose->toolbar->send_btn, sensitive);
if (compose->toolbar->sendl_btn)
@@ -9934,14 +9946,14 @@ static gboolean compose_get_ext_editor_uses_socket()
strstr(prefs_common_get_ext_editor_cmd(), "%w"));
}
-#ifndef G_OS_WIN32
+#ifdef GDK_WINDOWING_X11
static gboolean compose_ext_editor_plug_removed_cb(GtkSocket *socket, Compose *compose)
{
compose->exteditor_socket = NULL;
/* returning FALSE allows destruction of the socket */
return FALSE;
}
-#endif /* G_OS_WIN32 */
+#endif /* GDK_WINDOWING_X11 */
/**
* compose_undo_state_changed:
diff --git a/src/plugins/dillo/dillo_viewer.c b/src/plugins/dillo/dillo_viewer.c
index d2690bff6..8a93511d7 100644
--- a/src/plugins/dillo/dillo_viewer.c
+++ b/src/plugins/dillo/dillo_viewer.c
@@ -125,10 +125,15 @@ static void dillo_show_mimepart(MimeViewer *_viewer,
g_free(viewer->filename);
}
+#ifdef GDK_WINDOWING_X11
if (!GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
debug_print("dillo viewer only works on X11\n");
return;
}
+#else
+ debug_print("dillo viewer only works on X11\n");
+ return;
+#endif
viewer->filename = procmime_get_tmp_file_name(partinfo);
--
2.25.1