Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions debian/rules
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,6 @@ override_dh_auto_configure:

override_dh_strip:
dh_strip --dbg-package=libxapp-dbg

override_dh_makeshlibs:

17 changes: 17 additions & 0 deletions libxapp/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ libdeps += gmodule_dep
libdeps += dependency('gdk-pixbuf-2.0', version: '>=2.22.0', required: true)
libdeps += dependency('cairo', required: true)
libdeps += dependency('x11', required: true)
libdeps += dependency('dbusmenu-gtk3-0.4', required: true)

favorite_vfs_sources = [
'favorite-vfs-file.c',
Expand Down Expand Up @@ -56,6 +57,10 @@ xapp_sources = [
'xapp-preferences-window.c',
'xapp-stack-sidebar.c',
'xapp-status-icon.c',
'xapp-status-icon-common.c',
'xapp-status-icon-native.c',
'xapp-status-icon-fallback.c',
'xapp-status-icon-sni.c',
'xapp-status-icon-monitor.c',
'xapp-style-manager.c',
'xapp-util.c',
Expand Down Expand Up @@ -91,6 +96,18 @@ xapp_statusicon_interface_sources = gnome.gdbus_codegen(
dbus_headers = [ xapp_statusicon_interface_sources[1] ]
xapp_sources += xapp_statusicon_interface_sources[0]

sn_item_interface_sources = gnome.gdbus_codegen(
'sn-item-interface',
sources: 'sn-item.xml',
interface_prefix: 'org.kde',
namespace: 'Sn',
annotations: [[ 'org.kde.StatusNotifierItem', 'org.gtk.GDBus.C.Name', 'ItemInterface' ]],
install_header: true,
install_dir: join_paths(get_option('prefix'), get_option('includedir'), 'xapp/libxapp')
)

xapp_sources += sn_item_interface_sources[0]

xapp_enums = gnome.mkenums_simple('xapp-enums',
sources : xapp_headers,
identifier_prefix : 'XApp',
Expand Down
8 changes: 2 additions & 6 deletions xapp-sn-watcher/sn-item.xml → libxapp/sn-item.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,13 @@
<arg name="status" type="s" />
</signal>

<!-- ayatana labels -->
<!-- These are commented out because GDBusProxy would otherwise require them,
but they are not available for KDE indicators
-->
<!-- <signal name="XAyatanaNewLabel">
<!-- ayatana labels extension - used for displaying text labels next to icons -->
<signal name="XAyatanaNewLabel">
<arg type="s" name="label" direction="out" />
<arg type="s" name="guide" direction="out" />
</signal>
<property name="XAyatanaLabel" type="s" access="read" />
<property name="XAyatanaLabelGuide" type="s" access="read" />

-->
</interface>
</node>
99 changes: 99 additions & 0 deletions libxapp/xapp-status-icon-backend.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/* xapp-status-icon-backend.h
*
* Backend abstraction for XAppStatusIcon implementations
*/

#ifndef __XAPP_STATUS_ICON_BACKEND_H__
#define __XAPP_STATUS_ICON_BACKEND_H__

#include <glib-object.h>
#include "xapp-status-icon.h"

G_BEGIN_DECLS

typedef struct _XAppStatusIcon XAppStatusIcon;

/**
* XAppBackendType:
* @XAPP_BACKEND_NONE: No backend active
* @XAPP_BACKEND_NATIVE: Native XAppStatusIconMonitor backend (org.x.StatusIcon)
* @XAPP_BACKEND_SNI: StatusNotifier backend (org.kde.StatusNotifierItem)
* @XAPP_BACKEND_FALLBACK: GtkStatusIcon fallback backend (X11 xembed)
*
* Types of backends available for status icon display.
*/
typedef enum
{
XAPP_BACKEND_NONE,
XAPP_BACKEND_NATIVE,
XAPP_BACKEND_SNI,
XAPP_BACKEND_FALLBACK
} XAppBackendType;

/**
* XAppBackend:
* @type: The backend type
* @init: Initialize the backend for an icon instance
* @cleanup: Clean up backend resources for an icon instance
* @sync: Sync all properties to the backend
* @set_icon_name: Update icon name
* @set_tooltip: Update tooltip text
* @set_visible: Update visibility state
* @set_label: Update label text
*
* Backend operations structure. Each backend implements these functions
* to handle icon lifecycle and property updates.
*/
typedef struct
{
XAppBackendType type;

/* Lifecycle */
gboolean (*init)(XAppStatusIcon *icon);
void (*cleanup)(XAppStatusIcon *icon);
void (*sync)(XAppStatusIcon *icon);

/* Property updates */
void (*set_icon_name)(XAppStatusIcon *icon, const gchar *icon_name);
void (*set_tooltip)(XAppStatusIcon *icon, const gchar *tooltip);
void (*set_visible)(XAppStatusIcon *icon, gboolean visible);
void (*set_label)(XAppStatusIcon *icon, const gchar *label);
} XAppBackend;

/* Backend implementation declarations */
extern XAppBackend native_backend_ops;
extern XAppBackend sni_backend_ops;
extern XAppBackend fallback_backend_ops;

/* Backend initialization functions */
gboolean native_backend_init(XAppStatusIcon *icon);
void native_backend_cleanup(XAppStatusIcon *icon);
void native_backend_sync(XAppStatusIcon *icon);
void native_backend_set_icon_name(XAppStatusIcon *icon, const gchar *icon_name);
void native_backend_set_tooltip(XAppStatusIcon *icon, const gchar *tooltip);
void native_backend_set_visible(XAppStatusIcon *icon, gboolean visible);
void native_backend_set_label(XAppStatusIcon *icon, const gchar *label);

gboolean fallback_backend_init(XAppStatusIcon *icon);
void fallback_backend_cleanup(XAppStatusIcon *icon);
void fallback_backend_sync(XAppStatusIcon *icon);
void fallback_backend_set_icon_name(XAppStatusIcon *icon, const gchar *icon_name);
void fallback_backend_set_tooltip(XAppStatusIcon *icon, const gchar *tooltip);
void fallback_backend_set_visible(XAppStatusIcon *icon, gboolean visible);
void fallback_backend_set_label(XAppStatusIcon *icon, const gchar *label);

gboolean sni_backend_init(XAppStatusIcon *icon);
void sni_backend_cleanup(XAppStatusIcon *icon);
void sni_backend_sync(XAppStatusIcon *icon);
void sni_backend_set_icon_name(XAppStatusIcon *icon, const gchar *icon_name);
void sni_backend_set_tooltip(XAppStatusIcon *icon, const gchar *tooltip);
void sni_backend_set_visible(XAppStatusIcon *icon, gboolean visible);
void sni_backend_set_label(XAppStatusIcon *icon, const gchar *label);

/* Helper functions */
const gchar *backend_type_to_string(XAppBackendType type);
XAppStatusIconState backend_type_to_state(XAppBackendType type);

G_END_DECLS

#endif /* __XAPP_STATUS_ICON_BACKEND_H__ */
Loading
Loading