applets: partially fix the build without X11

This commit is contained in:
Pierre Pronchery 2024-02-17 05:44:06 +01:00
parent 8b8169709a
commit 0ad30b30fb
3 changed files with 39 additions and 8 deletions

View File

@ -48,10 +48,12 @@ typedef struct _PanelApplet
GdkScreen * screen;
GdkWindow * root;
#if defined(GDK_WINDOWING_X11)
Atom atom_active;
Atom atom_close;
Window window;
Window panel;
#endif
} Close;
@ -64,11 +66,13 @@ static void _close_destroy(Close * close);
static void _close_do(Close * close);
/* callbacks */
#if defined(GDK_WINDOWING_X11)
static void _close_on_close(gpointer data);
static GdkFilterReturn _close_on_filter(GdkXEvent * xevent, GdkEvent * event,
gpointer data);
static void _close_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
gpointer data);
#endif
/* public */
@ -110,17 +114,23 @@ static Close * _close_init(PanelAppletHelper * helper, GtkWidget ** widget)
image = gtk_image_new_from_stock(applet.icon, iconsize);
#endif
gtk_button_set_image(GTK_BUTTON(close->widget), image);
#if defined(GDK_WINDOWING_X11)
g_signal_connect_swapped(close->widget, "clicked", G_CALLBACK(
_close_on_close), close);
close->source = g_signal_connect(close->widget, "screen-changed",
G_CALLBACK(_close_on_screen_changed), close);
#else
close->source = 0;
#endif
close->display = NULL;
close->screen = NULL;
close->root = NULL;
#if defined(GDK_WINDOWING_X11)
close->atom_active = 0;
close->atom_close = 0;
close->window = None;
close->panel = None;
#endif
gtk_widget_show(close->widget);
*widget = close->widget;
return close;
@ -132,13 +142,16 @@ static void _close_destroy(Close * close)
{
if(close->source != 0)
g_signal_handler_disconnect(close->widget, close->source);
#if defined(GDK_WINDOWING_X11)
if(close->root != NULL)
gdk_window_remove_filter(close->root, _close_on_filter, close);
#endif
gtk_widget_destroy(close->widget);
object_delete(close);
}
#if defined(GDK_WINDOWING_X11)
/* accessors */
/* close_get_window_property */
static int _close_get_window_property(Close * close, Window window,
@ -269,3 +282,4 @@ static void _close_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
close->display, "_NET_CLOSE_WINDOW");
_close_do(close);
}
#endif

View File

@ -92,6 +92,7 @@ static void _desktop_destroy(Desktop * desktop)
/* on_clicked */
static void _desktop_on_clicked(GtkWidget * widget)
{
#if defined(GDK_WINDOWING_X11)
GdkScreen * screen;
GdkDisplay * display;
GdkWindow * root;
@ -113,4 +114,5 @@ static void _desktop_on_clicked(GtkWidget * widget)
SubstructureNotifyMask | SubstructureRedirectMask,
&xev);
gdk_error_trap_pop();
#endif
}

View File

@ -26,7 +26,10 @@
#include <System.h>
#include <Desktop.h>
#if GTK_CHECK_VERSION(3, 0, 0)
# include <gtk/gtkx.h>
# include <gdk/gdk.h>
# if defined(GDK_WINDOWING_X11)
# include <gtk/gtkx.h>
# endif
#endif
#include "Panel/applet.h"
#define _(string) gettext(string)
@ -36,15 +39,17 @@
/* Embed */
/* private */
/* types */
#if defined(GDK_WINDOWING_X11)
typedef struct _EmbedWidget
{
GtkWidget * socket;
#if GTK_CHECK_VERSION(3, 0, 0)
# if GTK_CHECK_VERSION(3, 0, 0)
unsigned long id;
#else
# else
GdkNativeWindow id;
#endif
# endif
} EmbedWidget;
#endif
typedef struct _PanelApplet
{
@ -57,8 +62,10 @@ typedef struct _PanelApplet
GtkWidget * window;
GtkWidget * vbox;
#if defined(GDK_WINDOWING_X11)
EmbedWidget * widgets;
size_t widgets_cnt;
#endif
} Embed;
@ -107,8 +114,10 @@ static Embed * _embed_init(PanelAppletHelper * helper,
embed->window = NULL;
embed->vbox = NULL;
embed->button = gtk_toggle_button_new();
#if defined(GDK_WINDOWING_X11)
embed->widgets = NULL;
embed->widgets_cnt = 0;
#endif
#if GTK_CHECK_VERSION(2, 12, 0)
gtk_widget_set_tooltip_text(embed->button, _("Desktop notifications"));
#endif
@ -138,7 +147,9 @@ static void _embed_destroy(Embed * embed)
g_source_remove(embed->source);
if(embed->vbox != NULL)
g_object_unref(embed->vbox);
#if defined(GDK_WINDOWING_X11)
free(embed->widgets);
#endif
gtk_widget_destroy(embed->button);
object_delete(embed);
}
@ -165,6 +176,7 @@ static void _embed_on_added(gpointer data)
static int _embed_on_desktop_message(void * data, uint32_t value1,
uint32_t value2, uint32_t value3)
{
#if defined(GDK_WINDOWING_X11)
Embed * embed = data;
GtkWidget * socket;
size_t i;
@ -197,6 +209,7 @@ static int _embed_on_desktop_message(void * data, uint32_t value1,
gtk_widget_show(socket);
gtk_box_pack_start(GTK_BOX(embed->vbox), socket, FALSE, TRUE, 0);
gtk_socket_add_id(GTK_SOCKET(socket), value2);
#endif
return 0;
}
@ -236,12 +249,13 @@ static gboolean _embed_on_idle(gpointer data)
/* embed_on_removed */
static gboolean _embed_on_removed(GtkWidget * widget, gpointer data)
{
#if defined(GDK_WINDOWING_X11)
Embed * embed = data;
size_t i;
#ifdef DEBUG
# ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
# endif
for(i = 0; i < embed->widgets_cnt; i++)
{
if(embed->widgets[i].socket != widget)
@ -257,10 +271,11 @@ static gboolean _embed_on_removed(GtkWidget * widget, gpointer data)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(embed->button),
FALSE);
gtk_widget_set_sensitive(embed->button, FALSE);
#ifdef EMBEDDED
# ifdef EMBEDDED
gtk_widget_hide(embed->button);
#endif
# endif
}
#endif
return FALSE;
}