Merge branch 'khorben/no-x11'

This commit is contained in:
Pierre Pronchery 2024-10-10 01:38:36 +02:00
commit fb69806f10
8 changed files with 301 additions and 125 deletions

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2016-2023 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2016-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -21,7 +21,7 @@
#include <errno.h>
#include <libintl.h>
#include <gdk/gdk.h>
#ifdef GDK_WINDOWING_X11
#if defined(GDK_WINDOWING_X11)
# include <gdk/gdkx.h>
# include <X11/XKBlib.h>
# include <X11/extensions/XKBfile.h>
@ -38,6 +38,7 @@
typedef struct _PanelApplet
{
PanelAppletHelper * helper;
#if defined(GDK_WINDOWING_X11)
GtkWidget * widget;
GtkWidget * leds[XkbNumIndicators];
gulong source;
@ -45,6 +46,7 @@ typedef struct _PanelApplet
GdkDisplay * display;
XkbDescPtr xkb;
#endif
} LEDs;
@ -54,9 +56,11 @@ static LEDs * _leds_init(PanelAppletHelper * helper, GtkWidget ** widget);
static void _leds_destroy(LEDs * leds);
/* callbacks */
#if defined(GDK_WINDOWING_X11)
static void _leds_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
gpointer data);
static gboolean _leds_on_timeout(gpointer data);
#endif
/* public */
@ -79,6 +83,7 @@ PanelAppletDefinition applet =
/* leds_init */
static LEDs * _leds_init(PanelAppletHelper * helper, GtkWidget ** widget)
{
#if defined(GDK_WINDOWING_X11)
LEDs * leds;
size_t i;
@ -104,12 +109,20 @@ static LEDs * _leds_init(PanelAppletHelper * helper, GtkWidget ** widget)
gtk_widget_show(leds->widget);
*widget = leds->widget;
return leds;
#else
(void) helper;
(void) widget;
error_set_code(-ENOSYS, "X11 support not detected");
return NULL;
#endif
}
/* leds_destroy */
static void _leds_destroy(LEDs * leds)
{
#if defined(GDK_WINDOWING_X11)
/* XXX free xkb? */
if(leds->timeout != 0)
g_source_remove(leds->timeout);
@ -117,9 +130,13 @@ static void _leds_destroy(LEDs * leds)
g_signal_handler_disconnect(leds->widget, leds->source);
gtk_widget_destroy(leds->widget);
object_delete(leds);
#else
(void) leds;
#endif
}
#if defined(GDK_WINDOWING_X11)
/* callbacks */
/* leds_on_screen_changed */
static void _leds_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
@ -245,3 +262,4 @@ static gboolean _leds_on_timeout(gpointer data)
}
return TRUE;
}
#endif

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2012-2023 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2012-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -29,14 +29,16 @@
#include <errno.h>
#include <libintl.h>
#include <gtk/gtk.h>
#ifdef GDK_WINDOWING_X11
# include <gdk/gdkx.h>
#endif
#if defined(GDK_WINDOWING_X11)
# if GTK_CHECK_VERSION(3, 0, 0)
# include <gtk/gtkx.h>
# else
# include <gdk/gdkx.h>
# endif
#endif
#include <System.h>
#include "Panel/applet.h"
#define _(string) gettext(string)
#define N_(string) string
@ -47,6 +49,7 @@
typedef struct _PanelApplet
{
PanelAppletHelper * helper;
#if defined(GDK_WINDOWING_X11)
GtkWidget * widget;
guint source;
@ -65,6 +68,7 @@ typedef struct _PanelApplet
GtkWidget * pr_width;
GtkWidget * pr_height;
GtkWidget * pr_ratio;
#endif
} Mixer;
@ -76,6 +80,7 @@ static void _mixer_destroy(Mixer * mixer);
static GtkWidget * _mixer_settings(Mixer * mixer, gboolean apply,
gboolean reset);
#if defined(GDK_WINDOWING_X11)
/* useful */
static int _mixer_spawn(Mixer * mixer, unsigned long * xid);
@ -83,6 +88,7 @@ static int _mixer_spawn(Mixer * mixer, unsigned long * xid);
static void _mixer_on_child(GPid pid, gint status, gpointer data);
static gboolean _mixer_on_removed(void);
static void _mixer_on_toggled(GtkWidget * widget, gpointer data);
#endif
/* constants */
@ -107,13 +113,16 @@ PanelAppletDefinition applet =
/* private */
/* functions */
/* mixer_init */
#if defined(GDK_WINDOWING_X11)
static void _init_size(Mixer * mixer, PanelAppletHelper * helper);
/* callbacks */
static gboolean _init_idle(gpointer data);
#endif
static Mixer * _mixer_init(PanelAppletHelper * helper,
GtkWidget ** widget)
{
#if defined(GDK_WINDOWING_X11)
Mixer * mixer;
GtkWidget * image;
@ -144,8 +153,16 @@ static Mixer * _mixer_init(PanelAppletHelper * helper,
mixer->source = g_idle_add(_init_idle, mixer);
*widget = mixer->widget;
return mixer;
#else
(void) helper;
(void) widget;
error_set_code(-ENOSYS, "X11 support not detected");
return NULL;
#endif
}
#if defined(GDK_WINDOWING_X11)
static void _init_size(Mixer * mixer, PanelAppletHelper * helper)
{
char const * p;
@ -200,20 +217,26 @@ static gboolean _init_idle(gpointer data)
gtk_widget_show(mixer->socket);
return FALSE;
}
#endif
/* mixer_destroy */
static void _mixer_destroy(Mixer * mixer)
{
#if defined(GDK_WINDOWING_X11)
if(mixer->source > 0)
g_source_remove(mixer->source);
if(mixer->pid > 0)
g_spawn_close_pid(mixer->pid);
gtk_widget_destroy(mixer->widget);
free(mixer);
#else
(void) mixer;
#endif
}
#if defined(GDK_WINDOWING_X11)
/* mixer_settings */
static void _settings_apply(Mixer * mixer, PanelAppletHelper * helper);
static void _settings_reset(Mixer * mixer, PanelAppletHelper * helper);
@ -221,10 +244,12 @@ static GtkWidget * _settings_widget(Mixer * mixer);
/* callbacks */
static void _settings_on_width_value_changed(gpointer data);
static void _settings_on_height_value_changed(gpointer data);
#endif
static GtkWidget * _mixer_settings(Mixer * mixer, gboolean apply,
gboolean reset)
{
#if defined(GDK_WINDOWING_X11)
PanelAppletHelper * helper = mixer->helper;
# ifdef DEBUG
@ -241,8 +266,16 @@ static GtkWidget * _mixer_settings(Mixer * mixer, gboolean apply,
if(apply == TRUE)
_settings_apply(mixer, helper);
return mixer->pr_box;
#else
(void) mixer;
(void) apply;
(void) reset;
return NULL;
#endif
}
#if defined(GDK_WINDOWING_X11)
static void _settings_apply(Mixer * mixer, PanelAppletHelper * helper)
{
char const * p;
@ -485,3 +518,4 @@ static void _mixer_on_toggled(GtkWidget * widget, gpointer data)
else
gtk_widget_hide(mixer->window);
}
#endif

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2010-2023 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2010-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Pager Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -52,6 +52,7 @@ typedef struct _PanelApplet
{
PanelAppletHelper * helper;
#if defined(GDK_WINDOWING_X11)
GtkWidget * box;
gulong source;
@ -62,10 +63,12 @@ typedef struct _PanelApplet
GdkDisplay * display;
GdkScreen * screen;
GdkWindow * root;
#endif
} Pager;
/* constants */
#if defined(GDK_WINDOWING_X11)
static const char * _pager_atom[PAGER_ATOM_COUNT] =
{
"_NET_CURRENT_DESKTOP",
@ -73,12 +76,14 @@ static const char * _pager_atom[PAGER_ATOM_COUNT] =
"_NET_NUMBER_OF_DESKTOPS",
"UTF8_STRING"
};
#endif
/* prototypes */
static Pager * _pager_init(PanelAppletHelper * helper, GtkWidget ** widget);
static void _pager_destroy(Pager * pager);
#if defined(GDK_WINDOWING_X11)
/* accessors */
static int _pager_get_current_desktop(Pager * pager);
static char ** _pager_get_desktop_names(Pager * pager);
@ -96,6 +101,7 @@ static GdkFilterReturn _pager_on_filter(GdkXEvent * xevent, GdkEvent * event,
gpointer data);
static void _pager_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
gpointer data);
#endif
/* public */
@ -118,6 +124,7 @@ PanelAppletDefinition applet =
/* pager_init */
static Pager * _pager_init(PanelAppletHelper * helper, GtkWidget ** widget)
{
#if defined(GDK_WINDOWING_X11)
Pager * pager;
GtkOrientation orientation;
@ -144,12 +151,20 @@ static Pager * _pager_init(PanelAppletHelper * helper, GtkWidget ** widget)
pager->root = NULL;
*widget = pager->box;
return pager;
#else
(void) helper;
(void) widget;
error_set_code(-ENOSYS, "X11 support not detected");
return NULL;
#endif
}
/* pager_destroy */
static void _pager_destroy(Pager * pager)
{
#if defined(GDK_WINDOWING_X11)
if(pager->source != 0)
g_signal_handler_disconnect(pager->box, pager->source);
pager->source = 0;
@ -157,9 +172,13 @@ static void _pager_destroy(Pager * pager)
gdk_window_remove_filter(pager->root, _pager_on_filter, pager);
gtk_widget_destroy(pager->box);
free(pager);
#else
(void) pager;
#endif
}
#if defined(GDK_WINDOWING_X11)
/* accessors */
/* pager_get_current_desktop */
static int _pager_get_current_desktop(Pager * pager)
@ -424,3 +443,4 @@ static void _pager_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
pager->display, _pager_atom[i]);
_pager_do(pager);
}
#endif

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2010-2023 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2010-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Pager Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -20,15 +20,17 @@
#include <string.h>
#include <errno.h>
#include <gtk/gtk.h>
#if defined(GDK_WINDOWING_X11)
# if GTK_CHECK_VERSION(3, 0, 0)
# include <gtk/gtkx.h>
#endif
#ifdef GDK_WINDOWING_X11
# else
# include <gdk/gdkx.h>
# include <X11/Xatom.h>
# endif
#endif
#include <System.h>
#include "Panel/applet.h"
#define N_(string) string
@ -38,9 +40,11 @@
typedef struct _PanelApplet
{
PanelAppletHelper * helper;
#if defined(GDK_WINDOWING_X11)
GtkWidget * hbox;
GtkWidget * owner;
gulong source;
#endif
} Systray;
@ -54,12 +58,14 @@ typedef struct _PanelApplet
static Systray * _systray_init(PanelAppletHelper * helper, GtkWidget ** widget);
static void _systray_destroy(Systray * systray);
#if defined(GDK_WINDOWING_X11)
/* callbacks */
static GdkFilterReturn _systray_on_filter(GdkXEvent * xevent, GdkEvent * event,
gpointer data);
static void _systray_on_owner_destroy(gpointer data);
static void _systray_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
gpointer data);
#endif
/* public */
@ -82,6 +88,7 @@ PanelAppletDefinition applet =
/* systray_init */
static Systray * _systray_init(PanelAppletHelper * helper, GtkWidget ** widget)
{
#if defined(GDK_WINDOWING_X11)
Systray * systray;
gint height = 24;
@ -105,12 +112,20 @@ static Systray * _systray_init(PanelAppletHelper * helper, GtkWidget ** widget)
gtk_widget_show(systray->hbox);
*widget = systray->hbox;
return systray;
#else
(void) helper;
(void) widget;
error_set_code(-ENOSYS, "X11 support not detected");
return NULL;
#endif
}
/* systray_destroy */
static void _systray_destroy(Systray * systray)
{
#if defined(GDK_WINDOWING_X11)
GdkWindow * window;
if(systray->source != 0)
@ -124,9 +139,13 @@ static void _systray_destroy(Systray * systray)
}
gtk_widget_destroy(systray->hbox);
free(systray);
#else
(void) systray;
#endif
}
#if defined(GDK_WINDOWING_X11)
/* callbacks */
/* systray_on_filter */
static GdkFilterReturn _filter_clientmessage(Systray * systray,
@ -233,3 +252,4 @@ static void _systray_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
| GDK_STRUCTURE_MASK);
gdk_window_add_filter(window, _systray_on_filter, systray);
}
#endif

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2011-2023 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2011-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -20,14 +20,19 @@
#include <string.h>
#include <errno.h>
#include <libintl.h>
#include <gdk/gdk.h>
#ifdef GDK_WINDOWING_X11
#include <gtk/gtk.h>
#if defined(GDK_WINDOWING_X11)
# if GTK_CHECK_VERSION(3, 0, 0)
# include <gtk/gtkx.h>
# else
# include <gdk/gdkx.h>
# endif
# include <X11/Xatom.h>
#endif
#include <System.h>
#include <Desktop.h>
#include "Panel/applet.h"
#define _(string) gettext(string)
#define N_(string) string
@ -39,6 +44,7 @@
/* Tasks */
/* private */
/* types */
#if defined(GDK_WINDOWING_X11)
# define atom(a) TASKS_ATOM_ ## a
typedef enum _TasksAtom
{
@ -47,9 +53,11 @@ typedef enum _TasksAtom
# define TASKS_ATOM_LAST TASKS_ATOM_UTF8_STRING
# define TASKS_ATOM_COUNT (TASKS_ATOM_LAST + 1)
# undef atom
#endif
typedef struct _PanelApplet Tasks;
#if defined(GDK_WINDOWING_X11)
typedef struct _Task
{
Tasks * tasks;
@ -60,10 +68,12 @@ typedef struct _Task
gboolean delete;
gboolean reorder;
} Task;
#endif
struct _PanelApplet
{
PanelAppletHelper * helper;
#if defined(GDK_WINDOWING_X11)
Task ** tasks;
size_t tasks_cnt;
gboolean label;
@ -81,9 +91,11 @@ struct _PanelApplet
GdkDisplay * display;
GdkScreen * screen;
GdkWindow * root;
#endif
};
#if defined(GDK_WINDOWING_X11)
/* constants */
# define atom(a) "" # a
static const char * _tasks_atom[TASKS_ATOM_COUNT] =
@ -95,9 +107,11 @@ static const char * _tasks_atom[TASKS_ATOM_COUNT] =
# define _NET_WM_MOVERESIZE_MOVE 8 /* movement only */
# define _NET_WM_MOVERESIZE_SIZE_KEYBOARD 9 /* size via keyboard */
# define _NET_WM_MOVERESIZE_MOVE_KEYBOARD 10 /* move via keyboard */
#endif
/* prototypes */
#if defined(GDK_WINDOWING_X11)
/* task */
static Task * _task_new(Tasks * tasks, gboolean label, gboolean reorder,
Window window, char const * name, GdkPixbuf * pixbuf);
@ -106,11 +120,13 @@ static void _task_set(Task * task, char const * name, GdkPixbuf * pixbuf);
static void _task_toggle_state(Task * task, TasksAtom state);
static void _task_toggle_state2(Task * task, TasksAtom state1,
TasksAtom state2);
#endif
/* tasks */
static Tasks * _tasks_init(PanelAppletHelper * helper, GtkWidget ** widget);
static void _tasks_destroy(Tasks * tasks);
#if defined(GDK_WINDOWING_X11)
/* accessors */
static int _tasks_get_current_desktop(Tasks * tasks);
static int _tasks_get_text_property(Tasks * tasks, Window window, Atom property,
@ -143,6 +159,7 @@ static void _task_on_popup_shade(gpointer data);
static void _task_on_popup_stick(gpointer data);
static void _task_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
gpointer data);
#endif
/* public */
@ -164,6 +181,7 @@ PanelAppletDefinition applet =
};
#if defined(GDK_WINDOWING_X11)
/* private */
/* functions */
/* Task */
@ -282,12 +300,14 @@ static void _task_toggle_state2(Task * task, TasksAtom state1,
&xev);
gdk_error_trap_pop_ignored();
}
#endif
/* Tasks */
/* tasks_init */
static Tasks * _tasks_init(PanelAppletHelper * helper, GtkWidget ** widget)
{
#if defined(GDK_WINDOWING_X11)
Tasks * tasks;
char const * p;
GtkOrientation orientation;
@ -361,12 +381,20 @@ static Tasks * _tasks_init(PanelAppletHelper * helper, GtkWidget ** widget)
gtk_widget_show_all(tasks->widget);
*widget = tasks->widget;
return tasks;
#else
(void) helper;
(void) widget;
error_set_code(-ENOSYS, "X11 support not detected");
return NULL;
#endif
}
/* tasks_destroy */
static void _tasks_destroy(Tasks * tasks)
{
#if defined(GDK_WINDOWING_X11)
size_t i;
if(tasks->source != 0)
@ -381,9 +409,13 @@ static void _tasks_destroy(Tasks * tasks)
tasks->tasks_cnt = 0;
gtk_widget_destroy(tasks->widget);
free(tasks);
#else
(void) tasks;
#endif
}
#if defined(GDK_WINDOWING_X11)
/* accessors */
/* tasks_get_current_desktop */
static int _tasks_get_current_desktop(Tasks * tasks)
@ -1090,3 +1122,4 @@ static void _task_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
tasks->display, _tasks_atom[i]);
_tasks_do(tasks);
}
#endif

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2011-2023 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2011-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -20,13 +20,14 @@
#include <string.h>
#include <errno.h>
#include <libintl.h>
#include <gdk/gdk.h>
#ifdef GDK_WINDOWING_X11
#include <gtk/gtk.h>
#if defined(GDK_WINDOWING_X11)
# include <gdk/gdkx.h>
# include <X11/Xatom.h>
#endif
#include <System.h>
#include "Panel/applet.h"
#define _(string) gettext(string)
#define N_(string) string
@ -37,6 +38,7 @@
typedef struct _PanelApplet
{
PanelAppletHelper * helper;
#if defined(GDK_WINDOWING_X11)
GtkWidget * widget;
gulong source;
@ -48,6 +50,7 @@ typedef struct _PanelApplet
Atom atom_name;
Atom atom_utf8_string;
Atom atom_visible_name;
#endif
} Title;
@ -56,6 +59,7 @@ typedef struct _PanelApplet
static Title * _title_init(PanelAppletHelper * helper, GtkWidget ** widget);
static void _title_destroy(Title * title);
#if defined(GDK_WINDOWING_X11)
/* accessors */
static int _title_get_text_property(Title * title, Window window, Atom property,
char ** ret);
@ -68,6 +72,7 @@ static GdkFilterReturn _title_on_filter(GdkXEvent * xevent, GdkEvent * event,
gpointer data);
static void _title_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
gpointer data);
#endif
/* public */
@ -90,6 +95,7 @@ PanelAppletDefinition applet =
/* title_init */
static Title * _title_init(PanelAppletHelper * helper, GtkWidget ** widget)
{
#if defined(GDK_WINDOWING_X11)
Title * title;
PangoFontDescription * bold;
@ -119,12 +125,20 @@ static Title * _title_init(PanelAppletHelper * helper, GtkWidget ** widget)
gtk_widget_show(title->widget);
*widget = title->widget;
return title;
#else
(void) helper;
(void) widget;
error_set_code(-ENOSYS, "X11 support not detected");
return NULL;
#endif
}
/* title_destroy */
static void _title_destroy(Title * title)
{
#if defined(GDK_WINDOWING_X11)
if(title->source != 0)
g_signal_handler_disconnect(title->widget, title->source);
title->source = 0;
@ -132,9 +146,13 @@ static void _title_destroy(Title * title)
gdk_window_remove_filter(title->root, _title_on_filter, title);
gtk_widget_destroy(title->widget);
free(title);
#else
(void) title;
#endif
}
#if defined(GDK_WINDOWING_X11)
/* accessors */
/* title_get_window_property */
static int _title_get_window_property(Title * title, Window window,
@ -325,3 +343,4 @@ static void _title_on_screen_changed(GtkWidget * widget, GdkScreen * previous,
title->display, "_NET_WM_VISIBLE_NAME");
_title_do(title);
}
#endif

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2011-2022 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2011-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -22,8 +22,10 @@
#include <libintl.h>
#include <gtk/gtk.h>
#if GTK_CHECK_VERSION(3, 0, 0)
# if defined(GDK_WINDOWING_X11)
# include <gtk/gtkx.h>
# endif
#endif
#include "window.h"
#include "../config.h"
#define _(string) gettext(string)
@ -113,8 +115,14 @@ PanelWindow * panel_window_new(PanelAppletHelper * helper,
}
else
{
#if defined(GDK_WINDOWING_X11)
panel->window = gtk_plug_new(0);
gtk_widget_show(panel->window);
#else
error_set_code(1, _("Unsupported panel position"));
object_delete(panel);
return NULL;
#endif
}
gtk_container_set_border_width(GTK_CONTAINER(panel->window), 2);
panel->height = icon_height + (PANEL_BORDER_WIDTH * 4);
@ -266,8 +274,14 @@ int panel_window_get_width(PanelWindow * panel)
/* panel_window_get_xid */
uint32_t panel_window_get_xid(PanelWindow * panel)
{
return (panel->position == PANEL_WINDOW_POSITION_EMBEDDED)
? gtk_plug_get_id(GTK_PLUG(panel->window)) : 0;
#if !defined(GDK_WINDOWING_X11)
(void) panel;
#else
if(panel->position == PANEL_WINDOW_POSITION_EMBEDDED)
return gtk_plug_get_id(GTK_PLUG(panel->window));
#endif
return 0;
}

View File

@ -1,5 +1,5 @@
/* $Id$ */
/* Copyright (c) 2012-2022 Pierre Pronchery <khorben@defora.org> */
/* Copyright (c) 2012-2024 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -22,12 +22,16 @@
#include <string.h>
#include <locale.h>
#include <libintl.h>
#include <System/error.h>
#include <Desktop.h>
#if defined(GDK_WINDOWING_X11)
# if GTK_CHECK_VERSION(3, 0, 0)
# include <gtk/gtkx.h>
# endif
#endif
#include "../include/Panel.h"
#include "../config.h"
#define _(string) gettext(string)
/* constants */
@ -50,8 +54,10 @@
static int _message(unsigned int timeout, char const * stock,
char const * title, char const * message);
#if defined(GDK_WINDOWING_X11)
/* callbacks */
static gboolean _message_on_timeout(gpointer data);
#endif
static int _error(char const * message, int ret);
static int _usage(void);
@ -62,6 +68,7 @@ static int _usage(void);
static int _message(unsigned int timeout, char const * stock,
char const * title, char const * message)
{
#if defined(GDK_WINDOWING_X11)
PangoFontDescription * bold;
GtkWidget * plug;
GtkWidget * hbox;
@ -136,9 +143,19 @@ static int _message(unsigned int timeout, char const * stock,
pango_font_description_free(bold);
gtk_main();
return 0;
#else
(void) timeout;
(void) stock;
(void) title;
(void) message;
return error_set_print(PROGNAME_PANEL_MESSAGE, 2, "%s",
"X11 support not detected");
#endif
}
#if defined(GDK_WINDOWING_X11)
/* callbacks */
/* message_on_timeout */
static gboolean _message_on_timeout(gpointer data)
@ -148,6 +165,7 @@ static gboolean _message_on_timeout(gpointer data)
gtk_main_quit();
return FALSE;
}
#endif
/* error */