Commit 11e8cd0d authored by Alberts Muktupāvels's avatar Alberts Muktupāvels

status-notifier: port to libgnome-panel

And remove libstatus-notifier.
parent 9df6b6d9
......@@ -4,11 +4,8 @@ SUBDIRS = \
clock \
fish \
notification-area \
status-notifier \
wncklet \
$(NULL)
if WITH_LIBSTATUS_NOTIFIER
SUBDIRS += status-notifier
endif
-include $(top_srcdir)/git.mk
NULL =
libsn_applet_la_CPPFLAGS = \
-DGNOMELOCALEDIR=\""$(localedir)"\" \
-I$(srcdir) \
-I$(srcdir)/../../libpanel-applet \
-I$(top_builddir)/libpanel-applet \
status_notifier_libdir = $(libdir)/gnome-panel/applets
status_notifier_lib_LTLIBRARIES = status-notifier.la
status_notifier_la_CPPFLAGS = \
-DLOCALEDIR=\""$(localedir)"\" \
-I$(top_srcdir) \
$(AM_CPPFLAGS) \
$(NULL)
libsn_applet_la_CFLAGS = \
$(LIBPANEL_APPLET_CFLAGS) \
status_notifier_la_CFLAGS = \
$(LIBGNOME_PANEL_CFLAGS) \
$(STATUS_NOTIFIER_CFLAGS) \
$(WARN_CFLAGS) \
$(AM_CFLAGS) \
$(NULL)
libsn_applet_la_SOURCES = \
status_notifier_la_SOURCES = \
sn-applet.c \
sn-applet.h \
sn-button.c \
sn-button.h \
sn-module.c \
$(NULL)
libsn_applet_la_LIBADD = \
../../libpanel-applet/libpanel-applet.la \
$(LIBPANEL_APPLET_LIBS) \
status_notifier_la_LIBADD = \
$(top_builddir)/libgnome-panel/libgnome-panel.la \
$(LIBGNOME_PANEL_LIBS) \
$(STATUS_NOTIFIER_LIBS) \
$(NULL)
libsn_applet_la_LDFLAGS = \
-module \
-avoid-version \
status_notifier_la_LDFLAGS = \
-module -avoid-version \
$(WARN_LDFLAGS) \
$(AM_LDFLAGS) \
$(NULL)
APPLET_LOCATION = $(pkglibdir)/libsn-applet.so
sn_applet_libdir = $(pkglibdir)
sn_applet_lib_LTLIBRARIES = libsn-applet.la
appletdir = $(appletsdir)
applet_in_files = org.gnome.panel.SnApplet.panel-applet.in
applet_DATA = $(applet_in_files:.panel-applet.in=.panel-applet)
$(applet_in_files): $(applet_in_files).in Makefile
$(AM_V_GEN)sed \
-e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
-e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
$< > $@
@PANEL_INTLTOOL_PANEL_APPLET_RULE@
EXTRA_DIST = \
org.gnome.panel.SnApplet.panel-applet.in.in \
$(NULL)
CLEANFILES = \
$(applet_DATA) \
$(applet_DATA).in \
$(NULL)
-include $(top_srcdir)/git.mk
[Applet Factory]
Id=SnAppletFactory
InProcess=true
Location=@LOCATION@
_Name=Status Notifier Host Applet Factory
_Description=Factory for status notifier host applet
[SnApplet]
_Name=Status Notifier Host
_Description=Display all Status Notifier Items
Icon=
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-panel
X-GNOME-Bugzilla-Component=sn-applet
X-GNOME-Bugzilla-Version=@VERSION@
......@@ -18,204 +18,66 @@
#include "config.h"
#include "sn-applet.h"
#include "sn-button.h"
struct _SnApplet
{
PanelApplet parent;
GpApplet parent;
SnHost *host;
GSList *items;
GtkWidget *box;
GtkWidget *box;
};
G_DEFINE_TYPE (SnApplet, sn_applet, PANEL_TYPE_APPLET)
static gint
compare_items (gconstpointer a,
gconstpointer b)
{
SnItem *item1;
SnItemCategory c1;
const gchar *id1;
SnItem *item2;
SnItemCategory c2;
const gchar *id2;
item1 = SN_ITEM (a);
c1 = sn_item_get_category (item1);
item2 = SN_ITEM (b);
c2 = sn_item_get_category (item2);
if (c1 < c2)
return -1;
if (c2 < c1)
return 1;
id1 = sn_item_get_id (item1);
id2 = sn_item_get_id (item2);
return g_strcmp0 (id1, id2);
}
static void
reorder_items (GtkWidget *widget,
gpointer data)
{
SnApplet *applet;
SnButton *button;
gint position;
applet = SN_APPLET (data);
button = SN_BUTTON (widget);
position = g_slist_index (applet->items, sn_button_get_item (button));
gtk_box_reorder_child (GTK_BOX (applet->box), widget, position);
}
G_DEFINE_TYPE (SnApplet, sn_applet, GP_TYPE_APPLET)
static void
item_added_cb (SnHost *host,
SnItem *item,
SnApplet *applet)
sn_applet_constructed (GObject *object)
{
GtkWidget *button;
applet->items = g_slist_prepend (applet->items, item);
applet->items = g_slist_sort (applet->items, compare_items);
button = sn_button_new (item);
gtk_box_pack_start (GTK_BOX (applet->box), button, FALSE, FALSE, 0);
gtk_widget_show (button);
g_object_bind_property (applet->box, "orientation", button, "orientation",
G_BINDING_DEFAULT);
gtk_container_foreach (GTK_CONTAINER (applet->box), reorder_items, applet);
G_OBJECT_CLASS (sn_applet_parent_class)->constructed (object);
gtk_widget_show (GTK_WIDGET (object));
}
static void
item_remove (GtkWidget *widget,
gpointer data)
sn_applet_placement_changed (GpApplet *applet,
GtkOrientation orientation,
GtkPositionType position)
{
SnButton *button;
SnItem *item;
SnApplet *sn;
GtkOrientable *orientable;
button = SN_BUTTON (widget);
item = SN_ITEM (data);
sn = SN_APPLET (applet);
orientable = GTK_ORIENTABLE (sn->box);
if (sn_button_get_item (button) == item)
gtk_widget_destroy (widget);
gtk_orientable_set_orientation (orientable, orientation);
}
static void
item_removed_cb (SnHost *host,
SnItem *item,
SnApplet *applet)
{
GSList *l;
for (l = applet->items; l != NULL; l = g_slist_next (l))
{
SnItem *tmp;
tmp = SN_ITEM (l->data);
if (tmp != item)
continue;
applet->items = g_slist_remove (applet->items, l->data);
gtk_container_foreach (GTK_CONTAINER (applet->box),
item_remove, item);
}
}
static gboolean
sn_applet_fill (SnApplet *applet)
{
applet->host = sn_host_new (SN_HOST_FLAGS_NONE);
g_signal_connect (applet->host, "item-added",
G_CALLBACK (item_added_cb), applet);
g_signal_connect (applet->host, "item-removed",
G_CALLBACK (item_removed_cb), applet);
gtk_widget_show (GTK_WIDGET (applet));
return TRUE;
}
static gboolean
sn_applet_factory (PanelApplet *applet,
const gchar *iid,
gpointer user_data)
{
if (g_strcmp0 (iid, "SnApplet") == 0)
return sn_applet_fill (SN_APPLET (applet));
return FALSE;
}
static void
sn_applet_dispose (GObject *object)
{
SnApplet *applet;
applet = SN_APPLET (object);
g_clear_object (&applet->host);
g_clear_pointer (&applet->items, g_slist_free);
G_OBJECT_CLASS (sn_applet_parent_class)->dispose (object);
}
static void
sn_applet_change_orient (PanelApplet *applet,
PanelAppletOrient orient)
{
SnApplet *sn_applet;
GtkOrientation orientation;
sn_applet = SN_APPLET (applet);
orientation = panel_applet_get_gtk_orientation (applet);
gtk_orientable_set_orientation (GTK_ORIENTABLE (sn_applet->box),
orientation);
}
static void
sn_applet_class_init (SnAppletClass *applet_class)
sn_applet_class_init (SnAppletClass *sn_class)
{
GObjectClass *object_class;
PanelAppletClass *panel_applet_class;
GpAppletClass *applet_class;
object_class = G_OBJECT_CLASS (applet_class);
panel_applet_class = PANEL_APPLET_CLASS (applet_class);
object_class = G_OBJECT_CLASS (sn_class);
applet_class = GP_APPLET_CLASS (sn_class);
object_class->dispose = sn_applet_dispose;
object_class->constructed = sn_applet_constructed;
panel_applet_class->change_orient = sn_applet_change_orient;
applet_class->placement_changed = sn_applet_placement_changed;
}
static void
sn_applet_init (SnApplet *applet)
sn_applet_init (SnApplet *sn)
{
PanelApplet *panel_applet;
GpApplet *applet;
GpAppletFlags flags;
GtkOrientation orientation;
panel_applet = PANEL_APPLET (applet);
orientation = panel_applet_get_gtk_orientation (panel_applet);
applet = GP_APPLET (sn);
panel_applet_set_flags (panel_applet, PANEL_APPLET_HAS_HANDLE |
PANEL_APPLET_EXPAND_MINOR);
flags = GP_APPLET_FLAGS_EXPAND_MINOR | GP_APPLET_FLAGS_HAS_HANDLE;
orientation = gp_applet_get_orientation (applet);
applet->box = gtk_box_new (orientation, 0);
gtk_container_add (GTK_CONTAINER (applet), applet->box);
gtk_widget_show (applet->box);
}
gp_applet_set_flags (applet, flags);
PANEL_APPLET_IN_PROCESS_FACTORY ("SnAppletFactory", SN_TYPE_APPLET,
sn_applet_factory, NULL);
sn->box = gtk_box_new (orientation, 0);
gtk_container_add (GTK_CONTAINER (sn), sn->box);
gtk_widget_show (sn->box);
}
......@@ -18,26 +18,12 @@
#ifndef SN_APPLET_H
#define SN_APPLET_H
#include <panel-applet.h>
#include <libgnome-panel/gp-applet.h>
G_BEGIN_DECLS
#define SN_TYPE_APPLET (sn_applet_get_type())
#define SN_APPLET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SN_TYPE_APPLET, SnApplet))
#define SN_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SN_TYPE_APPLET, SnAppletClass))
#define SN_IS_APPLET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SN_TYPE_APPLET))
#define SN_IS_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SN_TYPE_APPLET))
#define SN_APPLET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), SN_TYPE_APPLET, SnAppletClass))
typedef struct _SnApplet SnApplet;
typedef struct _SnAppletClass SnAppletClass;
struct _SnAppletClass
{
PanelAppletClass parent_class;
};
GType sn_applet_get_type (void);
#define SN_TYPE_APPLET sn_applet_get_type ()
G_DECLARE_FINAL_TYPE (SnApplet, sn_applet, SN, APPLET, GpApplet)
G_END_DECLS
......
/*
* Copyright (C) 2016 Alberts Muktupāvels
*
* 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
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <glib/gi18n-lib.h>
#include <libgnome-panel/gp-module.h>
#include "sn-applet.h"
static GpModuleInfo *
sn_get_module_info (void)
{
GpModuleInfo *info;
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
info = gp_module_info_new ("status-notifier", PACKAGE_VERSION);
gp_module_info_set_applets (info, "status-notifier", NULL);
gp_module_info_set_translation_domain (info, GETTEXT_PACKAGE);
return info;
}
static GpAppletInfo *
sn_get_applet_info (const gchar *applet)
{
const gchar *description;
GpAppletInfo *info;
description = _("Display all Status Notifier Items");
info = gp_applet_info_new (_("Status Notifier Host"), description, NULL);
return info;
}
static GType
sn_get_applet_type (const gchar *applet)
{
return SN_TYPE_APPLET;
}
guint32
gp_module_get_abi_version (void)
{
return GP_MODULE_ABI_VERSION;
}
void
gp_module_get_vtable (GpModuleVTable *vtable)
{
*vtable = (GpModuleVTable) {
sn_get_module_info,
sn_get_applet_info,
sn_get_applet_type,
NULL
};
}
......@@ -148,6 +148,10 @@ PKG_CHECK_MODULES([NOTIFICATION_AREA], [
x11
])
PKG_CHECK_MODULES([STATUS_NOTIFIER], [
gtk+-3.0 >= $GTK_REQUIRED
])
PKG_CHECK_MODULES(WNCKLET, gtk+-3.0 >= $GTK_REQUIRED libwnck-3.0 >= $LIBWNCK_REQUIRED)
AC_SUBST(WNCKLET_CFLAGS)
AC_SUBST(WNCKLET_LIBS)
......@@ -190,23 +194,6 @@ fi
AM_CONDITIONAL(ENABLE_EDS, test "$enable_eds" = "yes")
AC_SUBST(CLOCK_EDS_ICONDIR)
dnl **************************************************************************
dnl Build with libstatus-notifier (experimental)
dnl **************************************************************************
AC_ARG_WITH([libstatus-notifier],
[AS_HELP_STRING([--with-libstatus-notifier],
[Build with libstatus-notifier (experimental)])],
[with_libstatus_notifier="$withval"],
[with_libstatus_notifier=no])
AS_IF([test "x$with_libstatus_notifier" = "xyes"], [
PKG_CHECK_MODULES([STATUS_NOTIFIER], [libstatus-notifier-3.0])
])
AM_CONDITIONAL([WITH_LIBSTATUS_NOTIFIER],
[test "x$with_libstatus_notifier" = "xyes"])
dnl **************************************************************************
dnl Check if struct dirent contains a d_type member, for run dialog
dnl **************************************************************************
......@@ -327,5 +314,3 @@ echo ""
echo " Evolution-Data-Server support ...: ${enable_eds}"
echo " Build gtk-doc documentation .....: ${enable_gtk_doc}"
echo ""
echo " Build with libstatus-notifier ...: ${with_libstatus_notifier}"
echo ""
......@@ -17,7 +17,7 @@ applets/fish/fish-module.c
applets/notification-area/na-applet.c
applets/notification-area/na-module.c
applets/notification-area/na-tray-manager.c
[type: gettext/ini]applets/status-notifier/org.gnome.panel.SnApplet.panel-applet.in.in
applets/status-notifier/sn-module.c
[type: gettext/ini]applets/wncklet/org.gnome.panel.Wncklet.panel-applet.in.in
applets/wncklet/showdesktop.c
applets/wncklet/window-list.c
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment